diff -pruN 0.3.3.9-1/aclocal.m4 0.3.4.8-1/aclocal.m4
--- 0.3.3.9-1/aclocal.m4	2018-07-13 18:25:31.000000000 +0000
+++ 0.3.4.8-1/aclocal.m4	2018-09-07 20:21:13.000000000 +0000
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ You have another version of autoconf.  I
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented b
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
+[am__api_version='1.15'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.15.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -51,12 +51,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14.1])dnl
+[AM_AUTOMAKE_VERSION([1.15.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+# Copyright (C) 2011-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -118,7 +118,7 @@ AC_SUBST([AR])dnl
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -170,7 +170,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -201,7 +201,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -392,7 +392,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -468,7 +468,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS]
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -558,8 +558,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
@@ -633,6 +633,9 @@ END
     AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
   fi
 fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
 ])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
@@ -662,7 +665,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -673,7 +676,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNA
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -683,7 +686,7 @@ if test x"${install_sh}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -704,7 +707,7 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -754,7 +757,7 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -793,7 +796,7 @@ fi
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -822,7 +825,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -869,7 +872,7 @@ AC_LANG_POP([C])])
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -888,7 +891,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -969,7 +972,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1029,7 +1032,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1057,7 +1060,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1076,7 +1079,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff -pruN 0.3.3.9-1/ar-lib 0.3.4.8-1/ar-lib
--- 0.3.3.9-1/ar-lib	2018-07-12 17:16:59.000000000 +0000
+++ 0.3.4.8-1/ar-lib	2018-06-25 18:12:07.000000000 +0000
@@ -1,10 +1,10 @@
-#! /bin/sh
+#!/bin/sh
 # Wrapper for Microsoft lib.exe
 
 me=ar-lib
 scriptversion=2012-03-01.08; # UTC
 
-# Copyright (C) 2010-2013 Free Software Foundation, Inc.
+# Copyright (C) 2010-2017 Free Software Foundation, Inc.
 # Written by Peter Rosin <peda@lysator.liu.se>.
 #
 # This program is free software; you can redistribute it and/or modify
diff -pruN 0.3.3.9-1/ChangeLog 0.3.4.8-1/ChangeLog
--- 0.3.3.9-1/ChangeLog	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/ChangeLog	2018-09-10 12:47:03.000000000 +0000
@@ -1,3 +1,286 @@
+Changes in version 0.3.4.8 - 2018-09-10
+  Tor 0.3.4.8 is the first stable release in its series; it includes
+  compilation and portability fixes.
+
+  The Tor 0.3.4 series includes improvements for running Tor in
+  low-power and embedded environments, which should help performance in
+  general. We've begun work on better modularity, and included preliminary
+  changes on the directory authority side to accommodate a new bandwidth
+  measurement system.  We've also integrated more continuous-integration
+  systems into our development process, and made corresponding changes to
+  Tor's testing infrastructure.  Finally, we've continued to refine
+  our anti-denial-of-service code.
+
+  Below are the changes since 0.3.4.7-rc.  For a complete list of changes
+  since 0.3.3.9, see the ReleaseNotes file.
+
+  o Minor features (compatibility):
+    - Tell OpenSSL to maintain backward compatibility with previous
+      RSA1024/DH1024 users in Tor. With OpenSSL 1.1.1-pre6, these
+      ciphers are disabled by default. Closes ticket 27344.
+
+  o Minor features (continuous integration):
+    - Log the compiler path and version during Appveyor builds.
+      Implements ticket 27449.
+    - Show config.log and test-suite.log after failed Appveyor builds.
+      Also upload the zipped full logs as a build artifact. Implements
+      ticket 27430.
+
+  o Minor bugfixes (compilation):
+    - Silence a spurious compiler warning on the GetAdaptersAddresses
+      function pointer cast. This issue is already fixed by 26481 in
+      0.3.5 and later, by removing the lookup and cast. Fixes bug 27465;
+      bugfix on 0.2.3.11-alpha.
+    - Stop calling SetProcessDEPPolicy() on 64-bit Windows. It is not
+      supported, and always fails. Some compilers warn about the
+      function pointer cast on 64-bit Windows. Fixes bug 27461; bugfix
+      on 0.2.2.23-alpha.
+
+  o Minor bugfixes (continuous integration):
+    - Disable gcc hardening in Appveyor Windows 64-bit builds. As of
+      August 29 2018, Appveyor images come with gcc 8.2.0 by default.
+      Executables compiled for 64-bit Windows with this version of gcc
+      crash when Tor's --enable-gcc-hardening flag is set. Fixes bug
+      27460; bugfix on 0.3.4.1-alpha.
+    - When a Travis build fails, and showing a log fails, keep trying to
+      show the other logs. Fixes bug 27453; bugfix on 0.3.4.7-rc.
+    - When we use echo in Travis, don't pass a --flag as the first
+      argument. Fixes bug 27418; bugfix on 0.3.4.7-rc.
+
+  o Minor bugfixes (onion services):
+    - Silence a spurious compiler warning in
+      rend_client_send_introduction(). Fixes bug 27463; bugfix
+      on 0.1.1.2-alpha.
+
+  o Minor bugfixes (testing, chutney):
+    - When running make test-network-all, use the mixed+hs-v2 network.
+      (A previous fix to chutney removed v3 onion services from the
+      mixed+hs-v23 network, so seeing "mixed+hs-v23" in tests is
+      confusing.) Fixes bug 27345; bugfix on 0.3.2.1-alpha.
+    - Before running make test-network-all, delete old logs and test
+      result files, to avoid spurious failures. Fixes bug 27295; bugfix
+      on 0.2.7.3-rc.
+
+
+Changes in version 0.3.4.7-rc - 2018-08-24
+  Tor 0.3.4.7-rc fixes several small compilation, portability, and
+  correctness issues in previous versions of Tor. This version is a
+  release candidate: if no serious bugs are found, we expect that the
+  stable 0.3.4 release will be (almost) the same as this release.
+
+  o Minor features (bug workaround):
+    - Compile correctly on systems that provide the C11 stdatomic.h
+      header, but where C11 atomic functions don't actually compile.
+      Closes ticket 26779; workaround for Debian issue 903709.
+
+  o Minor features (continuous integration):
+    - Backport Travis rust distcheck to 0.3.3. Closes ticket 24629.
+    - Enable macOS builds in our Travis CI configuration. Closes
+      ticket 24629.
+    - Install libcap-dev and libseccomp2-dev so these optional
+      dependencies get tested on Travis CI. Closes ticket 26560.
+    - Only post Appveyor IRC notifications when the build fails.
+      Implements ticket 27275.
+    - Run asciidoc during Travis CI. Implements ticket 27087.
+    - Use ccache in our Travis CI configuration. Closes ticket 26952.
+
+  o Minor features (continuous integration, rust):
+    - Use cargo cache in our Travis CI configuration. Closes
+      ticket 26952.
+
+  o Minor features (directory authorities):
+    - Authorities no longer vote to make the subprotocol version
+      "LinkAuth=1" a requirement: it is unsupportable with NSS, and
+      hasn't been needed since Tor 0.3.0.1-alpha. Closes ticket 27286.
+
+  o Minor features (geoip):
+    - Update geoip and geoip6 to the August 7 2018 Maxmind GeoLite2
+      Country database. Closes ticket 27089.
+
+  o Minor bugfixes (compilation, windows):
+    - Don't link or search for pthreads when building for Windows, even
+      if we are using build environment (like mingw) that provides a
+      pthreads library. Fixes bug 27081; bugfix on 0.1.0.1-rc.
+
+  o Minor bugfixes (continuous integration):
+    - Improve Appveyor CI IRC logging. Generate correct branches and
+      URLs for pull requests and tags. Use unambiguous short commits.
+      Fixes bug 26979; bugfix on master.
+    - Build with zstd on macOS. Fixes bug 27090; bugfix on 0.3.1.5-alpha.
+    - Pass the module flags to distcheck configure, and log the flags
+      before running configure. (Backported to 0.2.9 and later as a
+      precaution.) Fixes bug 27088; bugfix on 0.3.4.1-alpha.
+
+  o Minor bugfixes (in-process restart):
+    - Always call tor_free_all() when leaving tor_run_main(). When we
+      did not, restarting tor in-process would cause an assertion
+      failure. Fixes bug 26948; bugfix on 0.3.3.1-alpha.
+
+  o Minor bugfixes (linux seccomp2 sandbox):
+    - Fix a bug in our sandboxing rules for the openat() syscall.
+      Previously, no openat() call would be permitted, which would break
+      filesystem operations on recent glibc versions. Fixes bug 25440;
+      bugfix on 0.2.9.15. Diagnosis and patch from Daniel Pinto.
+
+  o Minor bugfixes (onion services):
+    - Fix bug that causes services to not ever rotate their descriptors
+      if they were getting SIGHUPed often. Fixes bug 26932; bugfix
+      on 0.3.2.1-alpha.
+
+  o Minor bugfixes (portability):
+    - Fix compilation of the unit tests on GNU/Hurd, which does not
+      define PATH_MAX. Fixes bug 26873; bugfix on 0.3.3.1-alpha. Patch
+      from "paulusASol".
+
+  o Minor bugfixes (rust):
+    - Backport test_rust.sh from master. Fixes bug 26497; bugfix
+      on 0.3.1.5-alpha.
+    - Consistently use ../../.. as a fallback for $abs_top_srcdir in
+      test_rust.sh. Fixes bug 27093; bugfix on 0.3.4.3-alpha.
+    - Protover parsing was accepting the presence of whitespace in
+      version strings, which the C implementation would choke on, e.g.
+      "Desc=1\t,2". Fixes bug 27177; bugfix on 0.3.3.5-rc.
+    - Protover parsing was ignoring a 2nd hyphen and everything after
+      it, accepting entries like "Link=1-5-foo". Fixes bug 27164; bugfix
+      on 0.3.3.1-alpha.
+    - Stop setting $CARGO_HOME. cargo will use the user's $CARGO_HOME, or
+      $HOME/.cargo by default. Fixes bug 26497; bugfix on 0.3.1.5-alpha.
+    - cd to ${abs_top_builddir}/src/rust before running cargo in
+      src/test/test_rust.sh. This makes the working directory consistent
+      between builds and tests. Fixes bug 26497; bugfix on 0.3.3.2-alpha.
+
+  o Minor bugfixes (testing, bootstrap):
+    - When calculating bootstrap progress, check exit policies and the
+      exit flag. Previously, Tor would only check the exit flag, which
+      caused race conditions in small and fast networks like chutney.
+      Fixes bug 27236; bugfix on 0.2.6.3-alpha.
+
+  o Minor bugfixes (testing, openssl compatibility):
+    - Our "tortls/cert_matches_key" unit test no longer relies on
+      OpenSSL internals. Previously, it relied on unsupported OpenSSL
+      behavior in a way that caused it to crash with OpenSSL 1.0.2p.
+      Fixes bug 27226; bugfix on 0.2.5.1-alpha.
+
+  o Minor bugfixes (Windows, compilation):
+    - Silence a compilation warning on MSVC 2017 and clang-cl. Fixes bug
+      27185; bugfix on 0.2.2.2-alpha.
+
+
+Changes in version 0.3.4.6-rc - 2018-08-06
+  Tor 0.3.4.6-rc fixes several small compilation, portability, and
+  correctness issues in previous versions of Tor. This version is a
+  release candidate: if no serious bugs are found, we expect that the
+  stable 0.3.4 release will be (almost) the same as this release.
+
+  o Major bugfixes (event scheduler):
+    - When we enable a periodic event, schedule it in the event loop
+      rather than running it immediately. Previously, we would re-run
+      periodic events immediately in the middle of (for example)
+      changing our options, with unpredictable effects. Fixes bug 27003;
+      bugfix on 0.3.4.1-alpha.
+
+  o Minor features (compilation):
+    - When building Tor, prefer to use Python 3 over Python 2, and more
+      recent (contemplated) versions over older ones. Closes
+      ticket 26372.
+    - When compiling with --enable-openbsd-malloc or --enable-tcmalloc,
+      tell the compiler not to include the system malloc implementation.
+      Fixes bug 20424; bugfix on 0.2.0.20-rc.
+    - Don't try to use a pragma to temporarily disable the
+      -Wunused-const-variable warning if the compiler doesn't support
+      it. Fixes bug 26785; bugfix on 0.3.2.11.
+
+  o Minor bugfixes (continuous integration):
+    - Skip a pair of unreliable key generation tests on Windows, until
+      the underlying issue in bug 26076 is resolved. Fixes bug 26830 and
+      bug 26853; bugfix on 0.2.7.3-rc and 0.3.2.1-alpha respectively.
+
+  o Minor features (controller):
+    - The control port now exposes the list of HTTPTunnelPorts and
+      ExtOrPorts via GETINFO net/listeners/httptunnel and
+      net/listeners/extor respectively. Closes ticket 26647.
+
+  o Minor bugfixes (directory authority):
+    - When voting for recommended versions, make sure that all of the
+      versions are well-formed and parsable. Fixes bug 26485; bugfix
+      on 0.1.1.6-alpha.
+
+  o Minor features (geoip):
+    - Update geoip and geoip6 to the July 3 2018 Maxmind GeoLite2
+      Country database. Closes ticket 26674.
+
+  o Minor features (Rust, portability):
+    - Rust cross-compilation is now supported. Closes ticket 25895.
+
+  o Minor bugfixes (compilation):
+    - Update build system so that tor builds again with --disable-unittests
+      after recent refactoring. Fixes bug 26789; bugfix on 0.3.4.3-alpha.
+    - Fix a compilation warning on some versions of GCC when building
+      code that calls routerinfo_get_my_routerinfo() twice, assuming
+      that the second call will succeed if the first one did. Fixes bug
+      26269; bugfix on 0.2.8.2-alpha.
+
+  o Minor bugfixes (controller):
+    - Report the port correctly when a port is configured to bind to
+      "auto". Fixes bug 26568; bugfix on 0.3.4.1-alpha.
+    - Parse the "HSADDRESS=" parameter in HSPOST commands properly.
+      Previously, it was misparsed and ignored. Fixes bug 26523; bugfix
+      on 0.3.3.1-alpha. Patch by "akwizgran".
+
+  o Minor bugfixes (correctness, flow control):
+    - Upon receiving a stream-level SENDME cell, verify that our window
+      has not grown too large. Fixes bug 26214; bugfix on svn
+      r54 (pre-0.0.1)
+
+  o Minor bugfixes (memory, correctness):
+    - Fix a number of small memory leaks identified by coverity. Fixes
+      bug 26467; bugfix on numerous Tor versions.
+
+  o Minor bugfixes (logging):
+    - Improve the log message when connection initiators fail to
+      authenticate direct connections to relays. Fixes bug 26927; bugfix
+      on 0.3.0.1-alpha.
+
+  o Minor bugfixes (portability):
+    - Avoid a compilation error in test_bwmgt.c on Solaris 10. Fixes bug
+      26994; bugfix on 0.3.4.1-alpha.
+    - Work around two different bugs in the OS X 10.10 and later SDKs
+      that would prevent us from successfully targeting earlier versions
+      of OS X. Fixes bug 26876; bugfix on 0.3.3.1-alpha.
+
+  o Minor bugfixes (single onion services, Tor2web):
+    - Log a protocol warning when single onion services or Tor2web
+      clients fail to authenticate direct connections to relays. Fixes
+      bug 26924; bugfix on 0.2.9.1-alpha.
+
+  o Minor bugfixes (testing):
+    - Disable core dumps in test_bt.sh, to avoid failures in "make
+      distcheck". Fixes bug 26787; bugfix on 0.2.5.2-alpha.
+
+  o Minor bugfixes (testing, compatibility):
+    - When running the ntor_ref.py and hs_ntor_ref.py tests, make sure
+      only to pass strings (rather than "bytes" objects) to the Python
+      subprocess module. Python 3 on Windows seems to require this.
+      Fixes bug 26535; bugfix on 0.2.5.5-alpha (for ntor_ref.py) and
+      0.3.1.1-alpha (for hs_ntor_ref.py).
+
+  o Minor bugfixes (v3 onion services):
+    - Stop sending ed25519 link specifiers in v3 onion service introduce
+      cells and descriptors, when the rendezvous or introduction point
+      doesn't support ed25519 link authentication. Fixes bug 26627;
+      bugfix on 0.3.2.4-alpha.
+
+
+Changes in version 0.3.4.5-rc - 2018-07-13
+  Tor 0.3.4.5-rc moves to a new bridge authority, meaning people running
+  bridge relays should upgrade.
+
+  o Directory authority changes:
+    - The "Bifroest" bridge authority has been retired; the new bridge
+      authority is "Serge", and it is operated by George from the
+      TorBSD project. Closes ticket 26771.
+
+
 Changes in version 0.3.3.9 - 2018-07-13
   Tor 0.3.3.9 moves to a new bridge authority, meaning people running
   bridge relays should upgrade.
@@ -250,6 +533,57 @@ Changes in version 0.2.9.16 - 2018-07-13
       Closes ticket 24854. Patch by "beastr0".
 
 
+Changes in version 0.3.4.4-rc - 2018-07-09
+  Tor 0.3.4.4-rc fixes several small compilation, portability, and
+  correctness issues in previous versions of Tor. This version is a
+  release candidate: if no serious bugs are found, we expect that the
+  stable 0.3.4 release will be (almost) the same as this release.
+
+  o Minor features (compilation):
+    - When building Tor, prefer to use Python 3 over Python 2, and more
+      recent (contemplated) versions over older ones. Closes
+      ticket 26372.
+
+  o Minor features (geoip):
+    - Update geoip and geoip6 to the July 3 2018 Maxmind GeoLite2
+      Country database. Closes ticket 26674.
+
+  o Minor features (Rust, portability):
+    - Rust cross-compilation is now supported. Closes ticket 25895.
+
+  o Minor bugfixes (compilation):
+    - Fix a compilation warning on some versions of GCC when building
+      code that calls routerinfo_get_my_routerinfo() twice, assuming
+      that the second call will succeed if the first one did. Fixes bug
+      26269; bugfix on 0.2.8.2-alpha.
+
+  o Minor bugfixes (control port):
+    - Report the port correctly when a port is configured to bind to
+      "auto". Fixes bug 26568; bugfix on 0.3.4.1-alpha.
+    - Handle the HSADDRESS= argument to the HSPOST command properly.
+      (Previously, this argument was misparsed and thus ignored.) Fixes
+      bug 26523; bugfix on 0.3.3.1-alpha. Patch by "akwizgran".
+
+  o Minor bugfixes (correctness, flow control):
+    - Upon receiving a stream-level SENDME cell, verify that our window
+      has not grown too large. Fixes bug 26214; bugfix on svn
+      r54 (pre-0.0.1).
+
+  o Minor bugfixes (memory, correctness):
+    - Fix a number of small memory leaks identified by coverity. Fixes
+      bug 26467; bugfix on numerous Tor versions.
+
+  o Minor bugfixes (testing, compatibility):
+    - When running the hs_ntor_ref.py test, make sure only to pass
+      strings (rather than "bytes" objects) to the Python subprocess
+      module. Python 3 on Windows seems to require this. Fixes bug
+      26535; bugfix on 0.3.1.1-alpha.
+    - When running the ntor_ref.py test, make sure only to pass strings
+      (rather than "bytes" objects) to the Python subprocess module.
+      Python 3 on Windows seems to require this. Fixes bug 26535; bugfix
+      on 0.2.5.5-alpha.
+
+
 Changes in version 0.3.3.8 - 2018-07-09
   Tor 0.3.3.8 backports several changes from the 0.3.4.x series, including
   fixes for a memory leak affecting directory authorities.
@@ -322,6 +656,75 @@ Changes in version 0.3.3.8 - 2018-07-09
       on 0.2.5.5-alpha.
 
 
+Changes in version 0.3.4.3-alpha - 2018-06-26
+  Tor 0.3.4.3-alpha fixes several bugs in earlier versions, including
+  one that was causing stability issues on directory authorities.
+
+  o Major bugfixes (directory authority):
+    - Stop leaking memory on directory authorities when planning to
+      vote. This bug was crashing authorities by exhausting their
+      memory. Fixes bug 26435; bugfix on 0.3.3.6.
+
+  o Major bugfixes (rust, testing):
+    - Make sure that failing tests in Rust will actually cause the build
+      to fail: previously, they were ignored. Fixes bug 26258; bugfix
+      on 0.3.3.4-alpha.
+
+  o Minor feature (directory authorities):
+    - Stop warning about incomplete bw lines before the first complete
+      bw line has been found, so that additional header lines can be
+      ignored. Fixes bug 25960; bugfix on 0.2.2.1-alpha
+
+  o Minor features (relay, diagnostic):
+    - Add several checks to detect whether Tor relays are uploading
+      their descriptors without specifying why they regenerated them.
+      Diagnostic for ticket 25686.
+
+  o Minor features (unit tests):
+    - Test complete bandwidth measurements files, and test that
+      incomplete bandwidth lines only give warnings when the end of the
+      header has not been detected. Fixes bug 25947; bugfix
+      on 0.2.2.1-alpha
+
+  o Minor bugfixes (compilation):
+    - Refrain from compiling unit testing related object files when
+      --disable-unittests is set to configure script. Fixes bug 24891;
+      bugfix on 0.2.5.1-alpha.
+    - When linking the libtor_testing.a library, only include the
+      dirauth object files once. Previously, they were getting added
+      twice. Fixes bug 26402; bugfix on 0.3.4.1-alpha.
+    - The --enable-fatal-warnings flag now affects Rust code as well.
+      Closes ticket 26245.
+
+  o Minor bugfixes (onion services):
+    - Recompute some consensus information after detecting a clock jump,
+      or after transitioning from a non-live consensus to a live
+      consensus. We do this to avoid having an outdated state, and
+      miscalculating the index for next-generation onion services. Fixes
+      bug 24977; bugfix on 0.3.2.1-alpha.
+
+  o Minor bugfixes (relay):
+    - Relays now correctly block attempts to re-extend to the previous
+      relay by Ed25519 identity. Previously they would warn in this
+      case, but not actually reject the attempt. Fixes bug 26158; bugfix
+      on 0.3.0.1-alpha.
+
+  o Minor bugfixes (testing):
+    - Fix compilation of the doctests in the Rust crypto crate. Fixes
+      bug 26415; bugfix on 0.3.4.1-alpha.
+    - Instead of trying to read the geoip configuration files from
+      within the unit tests, instead create our own ersatz files with
+      just enough geoip data in the format we expect. Trying to read
+      from the source directory created problems on Windows with mingw,
+      where the build system's paths are not the same as the platform's
+      paths. Fixes bug 25787; bugfix on 0.3.4.1-alpha.
+    - Refrain from trying to get an item from an empty smartlist in
+      test_bridges_clear_bridge_list. Set DEBUG_SMARTLIST in unit tests
+      to catch improper smartlist usage. Furthermore, enable
+      DEBUG_SMARTLIST globally when build is configured with fragile
+      hardening. Fixes bug 26196; bugfix on 0.3.4.1-alpha.
+
+
 Changes in version 0.3.3.7 - 2018-06-12
   Tor 0.3.3.7 backports several changes from the 0.3.4.x series, including
   fixes for bugs affecting compatibility and stability.
@@ -363,6 +766,72 @@ Changes in version 0.3.3.7 - 2018-06-12
       wanted. Fixes bugs 25691 and 25692; bugfix on 0.3.3.4-alpha.
 
 
+Changes in version 0.3.4.2-alpha - 2018-06-12
+  Tor 0.3.4.2-alpha fixes several minor bugs in the previous alpha
+  release, and forward-ports an authority-only security fix from 0.3.3.6.
+
+  o Directory authority changes:
+    - Add an IPv6 address for the "dannenberg" directory authority.
+      Closes ticket 26343.
+
+  o Major bugfixes (security, directory authority, denial-of-service, also in 0.3.3.6):
+    - Fix a bug that could have allowed an attacker to force a directory
+      authority to use up all its RAM by passing it a maliciously
+      crafted protocol versions string. Fixes bug 25517; bugfix on
+      0.2.9.4-alpha. This issue is also tracked as TROVE-2018-005.
+
+  o Minor features (continuous integration):
+    - Add the necessary configuration files for continuous integration
+      testing on Windows, via the Appveyor platform. Closes ticket
+      25549. Patches from Marcin Cieślak and Isis Lovecruft.
+
+  o Minor features (geoip):
+    - Update geoip and geoip6 to the June 7 2018 Maxmind GeoLite2
+      Country database. Closes ticket 26351.
+
+  o Minor bugfixes (compatibility, openssl):
+    - Work around a change in OpenSSL 1.1.1 where return values that
+      would previously indicate "no password" now indicate an empty
+      password. Without this workaround, Tor instances running with
+      OpenSSL 1.1.1 would accept descriptors that other Tor instances
+      would reject. Fixes bug 26116; bugfix on 0.2.5.16.
+
+  o Minor bugfixes (compilation):
+    - Silence unused-const-variable warnings in zstd.h with some GCC
+      versions. Fixes bug 26272; bugfix on 0.3.1.1-alpha.
+    - Fix compilation when using OpenSSL 1.1.0 with the "no-deprecated"
+      flag enabled. Fixes bug 26156; bugfix on 0.3.4.1-alpha.
+    - Avoid a compiler warning when casting the return value of
+      smartlist_len() to double with DEBUG_SMARTLIST enabled. Fixes bug
+      26283; bugfix on 0.2.4.10-alpha.
+
+  o Minor bugfixes (control port):
+    - Do not count 0-length RELAY_COMMAND_DATA cells as valid data in
+      CIRC_BW events. Previously, such cells were counted entirely in
+      the OVERHEAD field. Now they are not. Fixes bug 26259; bugfix
+      on 0.3.4.1-alpha.
+
+  o Minor bugfixes (controller):
+    - Improve accuracy of the BUILDTIMEOUT_SET control port event's
+      TIMEOUT_RATE and CLOSE_RATE fields. (We were previously
+      miscounting the total number of circuits for these field values.)
+      Fixes bug 26121; bugfix on 0.3.3.1-alpha.
+
+  o Minor bugfixes (hardening):
+    - Prevent a possible out-of-bounds smartlist read in
+      protover_compute_vote(). Fixes bug 26196; bugfix on 0.2.9.4-alpha.
+
+  o Minor bugfixes (onion services):
+    - Fix a bug that blocked the creation of ephemeral v3 onion
+      services. Fixes bug 25939; bugfix on 0.3.4.1-alpha.
+
+  o Minor bugfixes (test coverage tools):
+    - Update our "cov-diff" script to handle output from the latest
+      version of gcov, and to remove extraneous timestamp information
+      from its output. Fixes bugs 26101 and 26102; bugfix
+      on 0.2.5.1-alpha.
+
+
 Changes in version 0.3.3.6 - 2018-05-22
   Tor 0.3.3.6 is the first stable release in the 0.3.3 series. It
   backports several important fixes from the 0.3.4.1-alpha.
@@ -454,7 +923,7 @@ Changes in version 0.3.3.6 - 2018-05-22
       Fixes bug 26069; bugfix on 0.3.0.1-alpha.
 
   o Minor bugfixes (relay, crash, backport from 0.3.4.1-alpha):
-    - Avoid a crash when running with DirPort set but ORPort tuned off.
+    - Avoid a crash when running with DirPort set but ORPort turned off.
       Fixes a case of bug 23693; bugfix on 0.3.1.1-alpha.
 
   o Documentation (backport from 0.3.4.1-alpha):
@@ -462,6 +931,456 @@ Changes in version 0.3.3.6 - 2018-05-22
       ticket 25857. Patch from "CTassisF".
 
 
+Changes in version 0.3.4.1-alpha - 2018-05-17
+  Tor 0.3.4.1-alpha is the first release in the 0.3.4.x series. It
+  includes refactoring to begin reducing Tor's binary size and idle CPU
+  usage on mobile, along with prep work for new bandwidth scanners,
+  improvements to the experimental "vanguards" feature, and numerous
+  other small features and bugfixes.
+
+  o New system requirements:
+    - Tor no longer tries to support old operating systems without
+      mmap() or some local equivalent. Apparently, compilation on such
+      systems has been broken for some time, without anybody noticing or
+      complaining. Closes ticket 25398.
+
+  o Major feature (directory authority, modularization):
+    - The directory authority subsystem has been modularized. The code
+      is now located in src/or/dirauth/, and is compiled in by default.
+      To disable the module, the configure option
+      --disable-module-dirauth has been added. This module may be
+      disabled by default in some future release. Closes ticket 25610.
+
+  o Major features (main loop, CPU usage):
+    - When Tor is disabled (via DisableNetwork or via hibernation), it
+      no longer needs to run any per-second events. This change should
+      make it easier for mobile applications to disable Tor while the
+      device is sleeping, or Tor is not running. Closes ticket 26063.
+    - Tor no longer enables all of its periodic events by default.
+      Previously, Tor would enable all possible main loop events,
+      regardless of whether it needed them. Furthermore, many of these
+      events are now disabled when Tor is hibernating or DisableNetwork
+      is set. This is a big step towards reducing client CPU usage by
+      reducing the amount of wake-ups the daemon does. Closes tickets
+      25376 and 25762.
+    - The bandwidth-limitation logic has been refactored so that
+      bandwidth calculations are performed on-demand, rather than every
+      TokenBucketRefillInterval milliseconds. This change should improve
+      the granularity of our bandwidth calculations, and limit the
+      number of times that the Tor process needs to wake up when it is
+      idle. Closes ticket 25373.
+    - Move responsibility for many operations from a once-per-second
+      callback to a callback that is only scheduled as needed. Moving
+      this functionality has allowed us to disable the callback when
+      Tor's network is disabled. Once enough items are removed from our
+      once-per-second callback, we can eliminate it entirely to conserve
+      CPU when idle. The functionality removed includes: closing
+      connections, circuits, and channels (ticket 25932); consensus
+      voting (25937); flushing log callbacks (25951); honoring delayed
+      SIGNEWNYM requests (25949); rescanning the consensus cache
+      (25931); saving the state file to disk (25948); warning relay
+      operators about unreachable ports (25952); and keeping track of
+      Tor's uptime (26009).
+
+  o Major bugfixes (directory authorities, security):
+    - When directory authorities read a zero-byte bandwidth file, they
+      would previously log a warning with the contents of an
+      uninitialised buffer. They now log a warning about the empty file
+      instead. Fixes bug 26007; bugfix on 0.2.2.1-alpha.
+
+  o Major bugfixes (crash):
+    - Avoid a rare assertion failure in the circuit build timeout code
+      if we fail to allow any circuits to actually complete. Fixes bug
+      25733; bugfix on 0.2.2.2-alpha.
+
+  o Major bugfixes (directory authority):
+    - Avoid a crash when testing router reachability on a router that
+      could have an ed25519 ID, but which does not. Fixes bug 25415;
+      bugfix on 0.3.3.2-alpha.
+
+  o Major bugfixes (onion service):
+    - Correctly detect when onion services get disabled after HUP. Fixes
+      bug 25761; bugfix on 0.3.2.1.
+
+  o Major bugfixes (protover, voting):
+    - Revise Rust implementation of protover to use a more memory-
+      efficient voting algorithm and corresponding data structures, thus
+      avoiding a potential (but small impact) DoS attack where specially
+      crafted protocol strings would expand to several potential
+      megabytes in memory. In the process, several portions of code were
+      revised to be methods on new, custom types, rather than functions
+      taking interchangeable types, thus increasing type safety of the
+      module. Custom error types and handling were added as well, in
+      order to facilitate better error dismissal/handling in outside
+      crates and avoid mistakenly passing an internal error string to C
+      over the FFI boundary. Many tests were added, and some previous
+      differences between the C and Rust implementations have been
+      remedied. Fixes bug 24031; bugfix on 0.3.3.1-alpha.
+
+  o Major bugfixes (relay, denial of service):
+    - Impose a limit on circuit cell queue size. The limit can be
+      controlled by a consensus parameter. Fixes bug 25226; bugfix
+      on 0.2.4.14-alpha.
+
+  o Minor features (accounting):
+    - When Tor becomes dormant, it now uses a scheduled event to wake up
+      at the right time. Previously, we would use the per-second timer
+      to check whether to wake up, but we no longer have any per-second
+      timers enabled when the network is disabled. Closes ticket 26064.
+
+  o Minor features (code quality):
+    - Add optional spell-checking for the Tor codebase, using the
+      "misspell" program. To use this feature, run "make check-typos".
+      Closes ticket 25024.
+
+  o Minor features (compatibility):
+    - Tor now detects versions of OpenSSL 1.1.0 and later compiled with
+      the no-deprecated option, and builds correctly with them. Closes
+      tickets 19429, 19981, and 25353.
+    - Avoid some compilation warnings with recent versions of LibreSSL.
+      Closes ticket 26006.
+
+  o Minor features (compression, zstd):
+    - When running with zstd, Tor now considers using advanced functions
+      that the zstd maintainers have labeled as potentially unstable. To
+      prevent breakage, Tor will only use this functionality when the
+      runtime version of the zstd library matches the version with which
+      Tor was compiled. Closes ticket 25162.
+
+  o Minor features (configuration):
+    - The "DownloadSchedule" options have been renamed to end with
+      "DownloadInitialDelay". The old names are still allowed, but will
+      produce a warning. Comma-separated lists are still permitted for
+      these options, but all values after the first are ignored (as they
+      have been since 0.2.9). Closes ticket 23354.
+
+  o Minor features (continuous integration):
+    - Our .travis.yml configuration now includes support for testing the
+      results of "make distcheck". (It's not uncommon for "make check"
+      to pass but "make distcheck" to fail.) Closes ticket 25814.
+    - Our Travis CI configuration now integrates with the Coveralls
+      coverage analysis tool. Closes ticket 25818.
+
+  o Minor features (control port):
+    - Introduce GETINFO "current-time/{local,utc}" to return the local
+      and UTC times respectively in ISO format. This helps a controller
+      like Tor Browser detect a time-related error. Closes ticket 25511.
+      Patch by Neel Chauhan.
+    - Introduce new fields to the CIRC_BW event. There are two new
+      fields in each of the read and written directions. The DELIVERED
+      fields report the total valid data on the circuit, as measured by
+      the payload sizes of verified and error-checked relay command
+      cells. The OVERHEAD fields report the total unused bytes in each
+      of these cells. Closes ticket 25903.
+
+  o Minor features (directory authority):
+    - Directory authorities now open their key-pinning files as O_SYNC,
+      to limit their chances of accidentally writing partial lines.
+      Closes ticket 23909.
+
+  o Minor features (directory authority, forward compatibility):
+    - Make the lines of the measured bandwidth file able to contain
+      their entries in any order. Previously, the node_id entry needed
+      to come first. Closes ticket 26004.
+
+  o Minor features (entry guards):
+    - Introduce a new torrc option NumPrimaryGuards for controlling the
+      number of primary guards. Closes ticket 25843.
+
+  o Minor features (geoip):
+    - Update geoip and geoip6 to the May 1 2018 Maxmind GeoLite2 Country
+      database. Closes ticket 26104.
+
+  o Minor features (performance):
+    - Avoid a needless call to malloc() when processing an incoming
+      relay cell. Closes ticket 24914.
+    - Make our timing-wheel code run a tiny bit faster on 32-bit
+      platforms, by preferring 32-bit math to 64-bit. Closes
+      ticket 24688.
+    - Avoid a needless malloc()/free() pair every time we handle an ntor
+      handshake. Closes ticket 25150.
+
+  o Minor features (testing):
+    - Add a unit test for voting_schedule_get_start_of_next_interval().
+      Closes ticket 26014, and helps make unit test coverage
+      more deterministic.
+    - A new unittests module specifically for testing the functions in
+      the (new-ish) bridges.c module has been created with new
+      unittests, raising the code coverage percentages. Closes 25425.
+    - We now have improved testing for addressmap_get_virtual_address()
+      function. This should improve our test coverage, and make our test
+      coverage more deterministic. Closes ticket 25993.
+
+  o Minor features (timekeeping, circuit scheduling):
+    - When keeping track of how busy each circuit have been recently on
+      a given connection, use coarse-grained monotonic timers rather
+      than gettimeofday(). This change should marginally increase
+      accuracy and performance. Implements part of ticket 25927.
+
+  o Minor bugfixes (bandwidth management):
+    - Consider ourselves "low on write bandwidth" if we have exhausted
+      our write bandwidth some time in the last second. This was the
+      documented behavior before, but the actual behavior was to change
+      this value every TokenBucketRefillInterval. Fixes bug 25828;
+      bugfix on 0.2.3.5-alpha.
+
+  o Minor bugfixes (C correctness):
+    - Add a missing lock acquisition in the shutdown code of the control
+      subsystem. Fixes bug 25675; bugfix on 0.2.7.3-rc. Found by
+      Coverity; this is CID 1433643.
+
+  o Minor bugfixes (circuit path selection):
+    - Don't count path selection failures as circuit build failures.
+      This change should eliminate cases where Tor blames its guard or
+      the network for situations like insufficient microdescriptors
+      and/or overly restrictive torrc settings. Fixes bug 25705; bugfix
+      on 0.3.3.1-alpha.
+
+  o Minor bugfixes (client):
+    - Don't consider Tor running as a client if the ControlPort is open,
+      but no actual client ports are open. Fixes bug 26062; bugfix
+      on 0.2.9.4-alpha.
+
+  o Minor bugfixes (code style):
+    - Fixed multiple includes of transports.h in src/or/connection.c
+      Fixes bug 25261; bugfix on 0.2.5.1-alpha.
+    - Remove the unused variable n_possible from the function
+      channel_get_for_extend(). Fixes bug 25645; bugfix on 0.2.4.4-alpha
+
+  o Minor bugfixes (control interface):
+    - Respond with more human-readable error messages to GETINFO exit-
+      policy/* requests. Also, let controller know if an error is
+      transient (response code 551) or not (response code 552). Fixes
+      bug 25852; bugfix on 0.2.8.1-alpha.
+
+  o Minor bugfixes (controller):
+    - Make CIRC_BW event reflect the total of all data sent on a
+      circuit, including padding and dropped cells. Also fix a mis-
+      counting bug when STREAM_BW events were enabled. Fixes bug 25400;
+      bugfix on 0.2.5.2-alpha.
+
+  o Minor bugfixes (correctness, client):
+    - Upon receiving a malformed connected cell, stop processing the cell
+      immediately.  Previously we would mark the connection for close, but
+      continue processing the cell as if the connection were open. Fixes bug
+      26072; bugfix on 0.2.4.7-alpha.
+
+  o Minor bugfixes (directory client):
+    - When unverified-consensus is verified, rename it to cached-
+      consenus. Fixes bug 4187; bugfix on 0.2.0.3-alpha.
+    - Fixed launching a certificate fetch always during the scheduled
+      periodic consensus fetch by fetching only in those cases when
+      consensus are waiting for certs. Fixes bug 24740; bugfix
+      on 0.2.9.1-alpha.
+
+  o Minor bugfixes (documentation):
+    - Stop saying in the manual that clients cache ipv4 dns answers from
+      exit relays. We haven't used them since 0.2.6.3-alpha, and in
+      ticket 24050 we stopped even caching them as of 0.3.2.6-alpha, but
+      we forgot to say so in the man page. Fixes bug 26052; bugfix
+      on 0.3.2.6-alpha.
+
+  o Minor bugfixes (error reporting):
+    - Improve tolerance for directory authorities with skewed clocks.
+      Previously, an authority with a clock more than 60 seconds ahead
+      could cause a client with a correct clock to warn that the
+      client's clock was behind. Now the clocks of a majority of
+      directory authorities have to be ahead of the client before this
+      warning will occur. Fixes bug 25756; bugfix on 0.2.2.25-alpha.
+
+  o Minor bugfixes (Linux seccomp2 sandbox):
+    - Allow the nanosleep() system call, which glibc uses to implement
+      sleep() and usleep(). Fixes bug 24969; bugfix on 0.2.5.1-alpha.
+
+  o Minor bugfixes (onion service):
+    - Fix a memory leak when a v3 onion service is configured and gets a
+      SIGHUP signal. Fixes bug 25901; bugfix on 0.3.2.1-alpha.
+    - When parsing the descriptor signature, look for the token plus an
+      extra white-space at the end. This is more correct but also will
+      allow us to support new fields that might start with "signature".
+      Fixes bug 26069; bugfix on 0.3.0.1-alpha.
+
+  o Minor bugfixes (path selection):
+    - Only select relays when they have the descriptors we prefer to use
+      for them. This change fixes a bug where we could select a relay
+      because it had _some_ descriptor, but reject it later with a
+      nonfatal assertion error because it didn't have the exact one we
+      wanted. Fixes bugs 25691 and 25692; bugfix on 0.3.3.4-alpha.
+
+  o Minor bugfixes (portability):
+    - Do not align mmap length, as it is not required by POSIX, and the
+      getpagesize function is deprecated. Fixes bug 25399; bugfix
+      on 0.1.1.23.
+
+  o Minor bugfixes (portability, FreeBSD):
+    - In have_enough_mem_for_dircache(), the variable DIRCACHE_MIN_MEM_MB
+      does not stringify on FreeBSD, so we switch to tor_asprintf().
+      Fixes bug 20887; bugfix on 0.2.8.1-alpha. Patch by Neel Chauhan.
+
+  o Minor bugfixes (relay statistics):
+    - When a relay is collecting internal statistics about how many
+      create cell requests it has seen of each type, accurately count
+      the requests from relays that temporarily fall out of the
+      consensus. (To be extra conservative, we were already ignoring
+      requests from clients in our counts, and we continue ignoring them
+      here.) Fixes bug 24910; bugfix on 0.2.4.17-rc.
+
+  o Minor bugfixes (relay, crash):
+    - Avoid a crash when running with DirPort set but ORPort turned off.
+      Fixes a case of bug 23693; bugfix on 0.3.1.1-alpha.
+
+  o Minor bugfixes (restart-in-process):
+    - When shutting down, Tor now clears all the flags in the control.c
+      module. This should prevent a bug where authentication cookies are
+      not generated on restart. Fixes bug 25512; bugfix on 0.3.3.1-alpha.
+
+  o Minor bugfixes (testing):
+    - When testing workqueue event-cancellation, make sure that we
+      actually cancel an event, and that cancel each event with equal
+      probability. (It was previously possible, though extremely
+      unlikely, for our event-canceling test not to cancel any events.)
+      Fixes bug 26008; bugfix on 0.2.6.3-alpha.
+    - Repeat part of the test in test_client_pick_intro() a number of
+      times, to give it consistent coverage. Fixes bug 25996; bugfix
+      on 0.3.2.1-alpha.
+    - Remove randomness from the hs_common/responsible_hsdirs test, so
+      that it always takes the same path through the function it tests.
+      Fixes bug 25997; bugfix on 0.3.2.1-alpha.
+    - Change the behavior of the "channel/outbound" test so that it
+      never causes a 10-second rollover for the EWMA circuitmux code.
+      Previously, this behavior would happen randomly, and result in
+      fluctuating test coverage. Fixes bug 25994; bugfix
+      on 0.3.3.1-alpha.
+    - Use X509_new() to allocate certificates that will be freed later
+      with X509_free(). Previously, some parts of the unit tests had
+      used tor_malloc_zero(), which is incorrect, and which caused test
+      failures on Windows when they were built with extra hardening.
+      Fixes bugs 25943 and 25944; bugfix on 0.2.8.1-alpha. Patch by
+      Marcin Cieślak.
+    - While running the circuit_timeout test, fix the PRNG to a
+      deterministic AES stream, so that the test coverage from this test
+      will itself be deterministic. Fixes bug 25995; bugfix
+      on 0.2.2.2-alpha.
+
+  o Minor bugfixes (vanguards):
+    - Allow the last hop in a vanguard circuit to be the same as our
+      first, to prevent the adversary from influencing guard node choice
+      by choice of last hop. Also prevent the creation of A - B - A
+      paths, or A - A paths, which are forbidden by relays. Fixes bug
+      25870; bugfix on 0.3.3.1-alpha.
+
+  o Code simplification and refactoring:
+    - Remove duplicate code in parse_{c,s}method_line and bootstrap
+      their functionalities into a single function. Fixes bug 6236;
+      bugfix on 0.2.3.6-alpha.
+    - We remove the PortForwsrding and PortForwardingHelper options,
+      related functions, and the port_forwarding tests. These options
+      were used by the now-deprecated Vidalia to help ordinary users
+      become Tor relays or bridges. Closes ticket 25409. Patch by
+      Neel Chauhan.
+    - In order to make the OR and dir checking function in router.c less
+      confusing we renamed some functions and
+      consider_testing_reachability() has been split into
+      router_should_check_reachability() and
+      router_do_reachability_checks(). Also we improved the documentation
+      in some functions. Closes ticket 18918.
+    - Initial work to isolate Libevent usage to a handful of modules in
+      our codebase, to simplify our call structure, and so that we can
+      more easily change event loops in the future if needed. Closes
+      ticket 23750.
+    - Introduce a function to call getsockname() and return tor_addr_t,
+      to save a little complexity throughout the codebase. Closes
+      ticket 18105.
+    - Make hsdir_index in node_t a hsdir_index_t rather than a pointer
+      as hsdir_index is always present. Also, we move hsdir_index_t into
+      or.h. Closes ticket 23094. Patch by Neel Chauhan.
+    - Merge functions used for describing nodes and suppress the
+      functions that do not allocate memory for the output buffer
+      string. NODE_DESC_BUF_LEN constant and format_node_description()
+      function cannot be used externally from router.c module anymore.
+      Closes ticket 25432. Patch by valentecaio.
+    - Our main loop has been simplified so that all important operations
+      happen inside events. Previously, some operations had to happen
+      outside the event loop, to prevent infinite sequences of event
+      activations. Closes ticket 25374.
+    - Put a SHA1 public key digest in hs_service_intro_point_t, and use
+      it in register_intro_circ() and service_intro_point_new(). This
+      prevents the digest from being re-calculated each time. Closes
+      ticket 23107. Patch by Neel Chauhan.
+    - Refactor token-bucket implementations to use a common backend.
+      Closes ticket 25766.
+    - Remove extern declaration of stats_n_seconds_working variable from
+      main, protecting its accesses with get_uptime() and reset_uptime()
+      functions. Closes ticket 25081, patch by “valentecaio”.
+    - Remove our previous logic for "cached gettimeofday()" -- our
+      coarse monotonic timers are fast enough for this purpose, and far
+      less error-prone. Implements part of ticket 25927.
+    - Remove the return value for fascist_firewall_choose_address_base(),
+      and sister functions such as fascist_firewall_choose_address_node()
+      and fascist_firewall_choose_address_rs(). Also, while we're here,
+      initialize the ap argument as leaving it uninitialized can pose a
+      security hazard. Closes ticket 24734. Patch by Neel Chauhan.
+    - Rename two fields of connection_t struct. timestamp_lastwritten is
+      renamed to timestamp_last_write_allowed and timestamp_lastread is
+      renamed to timestamp_last_read_allowed. Closes ticket 24714, patch
+      by "valentecaio".
+    - Since Tor requires C99, remove our old workaround code for libc
+      implementations where free(NULL) doesn't work. Closes ticket 24484.
+    - Use our standard rate-limiting code to deal with excessive
+      libevent failures, rather than the hand-rolled logic we had
+      before. Closes ticket 26016.
+    - We remove the return value of node_get_prim_orport() and
+      node_get_prim_dirport(), and introduce node_get_prim_orport() in
+      node_ipv6_or_preferred() and node_ipv6_dir_preferred() in order to
+      check for a null address. Closes ticket 23873. Patch by
+      Neel Chauhan.
+    - We switch to should_record_bridge_info() in
+      geoip_note_client_seen() and options_need_geoip_info() instead of
+      accessing the configuration values directly. Fixes bug 25290;
+      bugfix on 0.2.1.6-alpha. Patch by Neel Chauhan.
+
+  o Deprecated features:
+    - As we are not recommending 0.2.5 anymore, we require relays that
+      once had an ed25519 key associated with their RSA key to always
+      have that key, instead of allowing them to drop back to a version
+      that didn't support ed25519. This means they need to use a new RSA
+      key if the want to downgrade to an older version of tor without
+      ed25519. Closes ticket 20522.
+
+  o Documentation:
+    - Correct an IPv6 error in the documentation for ExitPolicy. Closes
+      ticket 25857. Patch from "CTassisF".
+
+  o Removed features:
+    - Directory authorities will no longer support voting according to
+      any consensus method before consensus method 25. This keeps
+      authorities compatible with all authorities running 0.2.9.8 and
+      later, and does not break any clients or relays. Implements ticket
+      24378 and proposal 290.
+    - The PortForwarding and PortForwardingHelper features have been
+      removed. The reasoning is, given that implementations of NAT
+      traversal protocols within common consumer grade routers are
+      frequently buggy, and that the target audience for a NAT punching
+      feature is a perhaps less-technically-inclined relay operator,
+      when the helper fails to setup traversal the problems are usually
+      deep, ugly, and very router specific, making them horrendously
+      impossible for technical support to reliable assist with, and thus
+      resulting in frustration all around. Unfortunately, relay
+      operators who would like to run relays behind NATs will need to
+      become more familiar with the port forwarding configurations on
+      their local router. Closes 25409.
+    - The TestingEnableTbEmptyEvent option has been removed. It was used
+      in testing simulations to measure how often connection buckets
+      were emptied, in order to improve our scheduling, but it has not
+      been actively used in years. Closes ticket 25760.
+    - The old "round-robin" circuit multiplexer (circuitmux)
+      implementation has been removed, along with a fairly large set of
+      code that existed to support it. It has not been the default
+      circuitmux since we introduced the "EWMA" circuitmux in 0.2.4.x,
+      but it still required an unreasonable amount of memory and CPU.
+      Closes ticket 25268.
+
+
 Changes in version 0.3.3.5-rc - 2018-04-15
   Tor 0.3.3.5-rc fixes various bugs in earlier versions of Tor,
   including some that could affect reliability or correctness.
diff -pruN 0.3.3.9-1/compile 0.3.4.8-1/compile
--- 0.3.3.9-1/compile	2018-07-12 17:16:59.000000000 +0000
+++ 0.3.4.8-1/compile	2018-06-25 18:12:07.000000000 +0000
@@ -1,9 +1,9 @@
-#! /bin/sh
+#!/bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2012-10-14.11; # UTC
+scriptversion=2016-01-11.22; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -255,7 +255,8 @@ EOF
     echo "compile $scriptversion"
     exit $?
     ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
     func_cl_wrapper "$@"      # Doesn't return...
     ;;
 esac
@@ -342,6 +343,6 @@ exit $ret
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -pruN 0.3.3.9-1/config.guess 0.3.4.8-1/config.guess
--- 0.3.3.9-1/config.guess	2018-07-12 17:16:59.000000000 +0000
+++ 0.3.4.8-1/config.guess	2018-06-25 18:12:07.000000000 +0000
@@ -1,8 +1,8 @@
-#! /bin/sh
+#!/bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2014-03-23'
+timestamp='2017-08-08'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -24,12 +24,12 @@ timestamp='2014-03-23'
 # program.  This Exception is an additional permission under section 7
 # of the GNU General Public License, version 3 ("GPLv3").
 #
-# Originally written by Per Bothner.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 
 
 me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+	    /sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || \
+	    echo unknown)`
 	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
+	    earmv*)
+		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+		machine=${arch}${endian}-unknown
+		;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
+	# to ELF recently (or will in the future) and ABI.
 	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		os=netbsdelf
+		;;
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -197,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 		os=netbsd
 		;;
 	esac
+	# Determine ABI tags.
+	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+		;;
+	esac
 	# The OS release
 	# Debian GNU/NetBSD machines have a different userland, and
 	# thus, need a distinct triplet. However, they do not need
@@ -207,13 +224,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
+	echo "${machine}-${os}${release}${abi}"
 	exit ;;
     *:Bitrig:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -223,6 +240,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
 	exit ;;
+    *:LibertyBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
 	exit ;;
@@ -235,6 +256,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
+    *:Sortix:*:*)
+	echo ${UNAME_MACHINE}-unknown-sortix
+	exit ;;
+    *:Redox:*:*)
+	echo ${UNAME_MACHINE}-unknown-redox
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -251,42 +278,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
+		UNAME_MACHINE=alphaev5 ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
+		UNAME_MACHINE=alphaev56 ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
+		UNAME_MACHINE=alphapca56 ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
+		UNAME_MACHINE=alphapca57 ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
+		UNAME_MACHINE=alphaev6 ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
+		UNAME_MACHINE=alphaev67 ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
+		UNAME_MACHINE=alphaev69 ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
+		UNAME_MACHINE=alphaev7 ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
+		UNAME_MACHINE=alphaev79 ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
 	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
 	exitcode=$?
 	trap '' 0
@@ -359,16 +386,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
-	SUN_ARCH="i386"
+	SUN_ARCH=i386
 	# If there is a compiler, see if it is configured for 64-bit objects.
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
 	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
-		SUN_ARCH="x86_64"
+		SUN_ARCH=x86_64
 	    fi
 	fi
 	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -393,7 +420,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
 		echo m68k-sun-sunos${UNAME_RELEASE}
@@ -579,8 +606,9 @@ EOF
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
@@ -617,13 +645,13 @@ EOF
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
 		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
 		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
 		      532)                      # CPU_PA_RISC2_0
 			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+			  32) HP_ARCH=hppa2.0n ;;
+			  64) HP_ARCH=hppa2.0w ;;
+			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
 			esac ;;
 		    esac
 		fi
@@ -662,11 +690,11 @@ EOF
 		    exit (0);
 		}
 EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
+	if [ ${HP_ARCH} = hppa2.0w ]
 	then
 	    eval $set_cc_for_build
 
@@ -679,12 +707,12 @@ EOF
 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
 	    # => hppa64-hp-hpux11.23
 
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
 		grep -q __LP64__
 	    then
-		HP_ARCH="hppa2.0w"
+		HP_ARCH=hppa2.0w
 	    else
-		HP_ARCH="hppa64"
+		HP_ARCH=hppa64
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -789,14 +817,14 @@ EOF
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
 	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
 	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
 	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -812,10 +840,11 @@ EOF
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	case ${UNAME_PROCESSOR} in
 	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		UNAME_PROCESSOR=x86_64 ;;
+	    i386)
+		UNAME_PROCESSOR=i586 ;;
 	esac
+	echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
@@ -878,7 +907,7 @@ EOF
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
@@ -901,7 +930,7 @@ EOF
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
 	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
@@ -932,6 +961,9 @@ EOF
     crisv32:Linux:*:*)
 	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
+    e2k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     frv:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
@@ -944,6 +976,9 @@ EOF
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
+    k1om:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     m32r*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
@@ -969,6 +1004,9 @@ EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
+    mips64el:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     openrisc*:Linux:*:*)
 	echo or1k-unknown-linux-${LIBC}
 	exit ;;
@@ -1001,6 +1039,9 @@ EOF
     ppcle:Linux:*:*)
 	echo powerpcle-unknown-linux-${LIBC}
 	exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
@@ -1020,7 +1061,7 @@ EOF
 	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     xtensa*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
@@ -1099,7 +1140,7 @@ EOF
 	# uname -m prints for DJGPP always 'pc', but it prints nothing about
 	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
+	# prints for the "djgpp" host, or else GDB configure will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
 	exit ;;
@@ -1248,6 +1289,9 @@ EOF
     SX-8R:SUPER-UX:*:*)
 	echo sx8r-nec-superux${UNAME_RELEASE}
 	exit ;;
+    SX-ACE:SUPER-UX:*:*)
+	echo sxace-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
@@ -1261,16 +1305,23 @@ EOF
 	    UNAME_PROCESSOR=powerpc
 	fi
 	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		    grep IS_64BIT_ARCH >/dev/null
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_64BIT_ARCH >/dev/null
 		then
 		    case $UNAME_PROCESSOR in
 			i386) UNAME_PROCESSOR=x86_64 ;;
 			powerpc) UNAME_PROCESSOR=powerpc64 ;;
 		    esac
 		fi
+		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_PPC >/dev/null
+		then
+		    UNAME_PROCESSOR=powerpc
+		fi
 	    fi
 	elif test "$UNAME_PROCESSOR" = i386 ; then
 	    # Avoid executing cc on OS X 10.9, as it ships with a stub
@@ -1285,7 +1336,7 @@ EOF
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
+	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
@@ -1294,15 +1345,18 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
+    NEO-*:NONSTOP_KERNEL:*:*)
 	echo neo-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
+    NSR-*:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+	echo nsx-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
 	exit ;;
@@ -1316,7 +1370,7 @@ EOF
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = "386"; then
+	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
@@ -1358,7 +1412,7 @@ EOF
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
 	exit ;;
     i*86:rdos:*:*)
 	echo ${UNAME_MACHINE}-pc-rdos
@@ -1369,23 +1423,25 @@ EOF
     x86_64:VMkernel:*:*)
 	echo ${UNAME_MACHINE}-unknown-esx
 	exit ;;
+    amd64:Isilon\ OneFS:*:*)
+	echo x86_64-unknown-onefs
+	exit ;;
 esac
 
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
diff -pruN 0.3.3.9-1/config.rust.in 0.3.4.8-1/config.rust.in
--- 0.3.3.9-1/config.rust.in	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/config.rust.in	2018-06-21 12:38:21.000000000 +0000
@@ -0,0 +1,22 @@
+# Used by our cargo build.rs script to get variables from autoconf.
+#
+# The "configure" script will generate "config.rust" from "config.rust.in",
+# and then build.rs will read "config.rust".
+
+BUILDDIR=@BUILDDIR@
+TOR_LDFLAGS_zlib=@TOR_LDFLAGS_zlib@
+TOR_LDFLAGS_openssl=@TOR_LDFLAGS_openssl@
+TOR_LDFLAGS_libevent=@TOR_LDFLAGS_libevent@
+TOR_ZLIB_LIBS=@TOR_ZLIB_LIBS@
+TOR_LIB_MATH=@TOR_LIB_MATH@
+TOR_LIBEVENT_LIBS=@TOR_LIBEVENT_LIBS@
+TOR_OPENSSL_LIBS=@TOR_OPENSSL_LIBS@
+TOR_LIB_WS32=@TOR_LIB_WS32@
+TOR_LIB_GDI=@TOR_LIB_GDI@
+TOR_LIB_USERENV=@TOR_LIB_USERENV@
+CURVE25519_LIBS=@CURVE25519_LIBS@
+TOR_SYSTEMD_LIBS=@TOR_SYSTEMD_LIBS@
+TOR_LZMA_LIBS=@TOR_LZMA_LIBS@
+TOR_ZSTD_LIBS=@TOR_ZSTD_LIBS@
+LIBS=@LIBS@
+LDFLAGS=@LDFLAGS@
diff -pruN 0.3.3.9-1/config.sub 0.3.4.8-1/config.sub
--- 0.3.3.9-1/config.sub	2018-07-12 17:16:59.000000000 +0000
+++ 0.3.4.8-1/config.sub	2018-06-25 18:12:07.000000000 +0000
@@ -1,8 +1,8 @@
-#! /bin/sh
+#!/bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2014-09-11'
+timestamp='2017-04-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ timestamp='2014-09-11'
 # of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -33,7 +33,7 @@ timestamp='2014-09-11'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -53,8 +53,7 @@ timestamp='2014-09-11'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -68,7 +67,7 @@ Report bugs and patches to <config-patch
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,8 +116,8 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+  kopensolaris*-gnu* | cloudabi*-eabi* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -255,15 +254,16 @@ case $basic_machine in
 	| arc | arceb \
 	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
 	| avr | avr32 \
+	| ba \
 	| be32 | be64 \
 	| bfin \
 	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
+	| e2k | epiphany \
+	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
-	| i370 | i860 | i960 | ia64 \
+	| i370 | i860 | i960 | ia16 | ia64 \
 	| ip2k | iq2000 \
 	| k1om \
 	| le32 | le64 \
@@ -301,11 +301,12 @@ case $basic_machine in
 	| open8 | or1k | or1knd | or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pru \
 	| pyramid \
 	| riscv32 | riscv64 \
 	| rl78 | rx \
 	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -313,6 +314,8 @@ case $basic_machine in
 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| visium \
+	| wasm32 \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -327,6 +330,9 @@ case $basic_machine in
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
+	leon|leon[3-9])
+		basic_machine=sparc-$basic_machine
+		;;
 	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
@@ -372,17 +378,18 @@ case $basic_machine in
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| ba-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
+	| e2k-* | elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
+	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
 	| ip2k-* | iq2000-* \
 	| k1om-* \
 	| le32-* | le64-* \
@@ -423,13 +430,15 @@ case $basic_machine in
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pru-* \
 	| pyramid-* \
+	| riscv32-* | riscv64-* \
 	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tile*-* \
@@ -437,6 +446,8 @@ case $basic_machine in
 	| ubicom32-* \
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
+	| visium-* \
+	| wasm32-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -513,6 +524,9 @@ case $basic_machine in
 		basic_machine=i386-pc
 		os=-aros
 		;;
+	asmjs)
+		basic_machine=asmjs-unknown
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -633,6 +647,14 @@ case $basic_machine in
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
+	e500v[12])
+		basic_machine=powerpc-unknown
+		os=$os"spe"
+		;;
+	e500v[12]-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=$os"spe"
+		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -774,6 +796,9 @@ case $basic_machine in
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	leon-*|leon[3-9]-*)
+		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+		;;
 	m68knommu)
 		basic_machine=m68k-unknown
 		os=-linux
@@ -925,6 +950,9 @@ case $basic_machine in
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
+	nsx-tandem)
+		basic_machine=nsx-tandem
+		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -1009,7 +1037,7 @@ case $basic_machine in
 	ppc-* | ppcbe-*)
 		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
+	ppcle | powerpclittle)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
@@ -1017,9 +1045,9 @@ case $basic_machine in
 		;;
 	ppc64)	basic_machine=powerpc64-unknown
 		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+	ppc64le | powerpc64little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
@@ -1220,6 +1248,9 @@ case $basic_machine in
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
+	wasm32)
+		basic_machine=wasm32-unknown
+		;;
 	w65*)
 		basic_machine=w65-wdc
 		os=-none
@@ -1365,18 +1396,18 @@ case $os in
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
 	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
+	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
@@ -1385,7 +1416,8 @@ case $os in
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1517,6 +1549,8 @@ case $os in
 		;;
 	-nacl*)
 		;;
+	-ios)
+		;;
 	-none)
 		;;
 	*)
@@ -1612,6 +1646,9 @@ case $basic_machine in
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		;;
+	pru-*)
+		os=-elf
+		;;
 	*-be)
 		os=-beos
 		;;
diff -pruN 0.3.3.9-1/configure 0.3.4.8-1/configure
--- 0.3.3.9-1/configure	2018-07-13 18:25:34.000000000 +0000
+++ 0.3.4.8-1/configure	2018-09-07 20:21:15.000000000 +0000
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for tor 0.3.3.9.
+# Generated by GNU Autoconf 2.69 for tor 0.3.4.8.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='tor'
 PACKAGE_TARNAME='tor'
-PACKAGE_VERSION='0.3.3.9'
-PACKAGE_STRING='tor 0.3.3.9'
+PACKAGE_VERSION='0.3.4.8'
+PACKAGE_STRING='tor 0.3.4.8'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -638,6 +638,7 @@ CFLAGS_CONSTTIME
 CFLAGS_BUGTRAP
 ADD_MULODI4_FALSE
 ADD_MULODI4_TRUE
+RUST_LINKER_OPTIONS
 TOR_ZSTD_LIBS
 TOR_ZSTD_CFLAGS
 ZSTD_LIBS
@@ -668,11 +669,14 @@ THREADS_WIN32_FALSE
 THREADS_WIN32_TRUE
 TOR_RUST_EXTRA_LIBS
 RUST_DL
+RUST_WARN
 CARGO_ONLINE
-TOR_RUST_STATIC_NAME
+TOR_RUST_LIB_PATH
+RUST_TARGET_PROP
 TOR_RUST_DEPENDENCIES
 CARGO
 RUSTC
+TOR_RUST_TARGET
 BUILD_LIBTORRUNNER_FALSE
 BUILD_LIBTORRUNNER_TRUE
 BUILD_NT_SERVICES_FALSE
@@ -694,6 +698,9 @@ SED
 RANLIB
 ac_ct_AR
 AR
+TOR_MODULES_ALL_ENABLED
+BUILD_MODULE_DIRAUTH_FALSE
+BUILD_MODULE_DIRAUTH_TRUE
 USE_ANDROID_FALSE
 USE_ANDROID_TRUE
 USE_EVENT_TRACING_DEBUG_FALSE
@@ -834,6 +841,7 @@ enable_memory_sentinels
 enable_rust
 enable_cargo_online_mode
 enable_restart_debugging
+enable_zstd_advanced_apis
 enable_asciidoc
 enable_systemd
 enable_gcc_warnings
@@ -850,6 +858,7 @@ enable_seccomp
 enable_libscrypt
 enable_event_tracing_debug
 enable_android
+enable_module_dirauth
 with_tor_user
 with_tor_group
 with_libevent_dir
@@ -881,6 +890,7 @@ LIBSYSTEMD209_CFLAGS
 LIBSYSTEMD209_LIBS
 PERL
 PYTHON
+TOR_RUST_TARGET
 RUSTC
 CARGO
 TOR_RUST_DEPENDENCIES
@@ -1428,7 +1438,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures tor 0.3.3.9 to adapt to many kinds of systems.
+\`configure' configures tor 0.3.4.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1498,7 +1508,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of tor 0.3.3.9:";;
+     short | recursive ) echo "Configuration of tor 0.3.4.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1541,6 +1551,8 @@ Optional Features:
   --enable-restart-debugging
                           Build Tor with support for debugging in-process
                           restart. Developers only.
+  --disable-zstd-advanced-apis
+                          Build without support for zstd's "static-only" APIs.
   --disable-asciidoc      don't use asciidoc (disables building of manpages)
   --enable-systemd        enable systemd notification support
   --enable-gcc-warnings   deprecated alias for enable-fatal-warnings
@@ -1567,6 +1579,8 @@ Optional Features:
   --enable-event-tracing-debug
                           build with event tracing to debug log
   --enable-android        build with Android features enabled
+  --disable-module-dirauth
+                          Do not build tor with the dirauth module
   --enable-lzma           enable support for the LZMA compression scheme.
   --enable-zstd           enable support for the Zstandard compression scheme.
   --disable-largefile     omit support for large files
@@ -1610,6 +1624,9 @@ Some influential environment variables:
               linker flags for LIBSYSTEMD209, overriding pkg-config
   PERL        path to Perl binary
   PYTHON      path to Python binary
+  TOR_RUST_TARGET
+              Rust target, must be specified when cross-compiling (HOST !=
+              BUILD). example: i686-pc-windows-gnu
   RUSTC       path to the rustc binary
   CARGO       path to the cargo binary
   TOR_RUST_DEPENDENCIES
@@ -1685,7 +1702,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-tor configure 0.3.3.9
+tor configure 0.3.4.8
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2390,7 +2407,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by tor $as_me 0.3.3.9, which was
+It was created by tor $as_me 0.3.4.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2744,7 +2761,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # "foreign" means we don't follow GNU package layout standards
 # "1.11" means we require automake version 1.11 or newer
 # "subdir-objects" means put .o files in the same directory as the .c files
-am__api_version='1.14'
+am__api_version='1.15'
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2965,7 +2982,7 @@ else
 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -3259,7 +3276,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='tor'
- VERSION='0.3.3.9'
+ VERSION='0.3.4.8'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3293,8 +3310,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}ma
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 mkdir_p='$(MKDIR_P)'
 
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
@@ -5171,6 +5188,11 @@ if test "${enable_restart_debugging+set}
   enableval=$enable_restart_debugging;
 fi
 
+# Check whether --enable-zstd-advanced-apis was given.
+if test "${enable_zstd_advanced_apis+set}" = set; then :
+  enableval=$enable_zstd_advanced_apis;
+fi
+
 
 if test "x$enable_coverage" != "xyes" -a "x$enable_asserts_in_tests" = "xno" ; then
     as_fn_error $? "Can't disable assertions outside of coverage build" "$LINENO" 5
@@ -5284,6 +5306,11 @@ $as_echo "#define ENABLE_RESTART_DEBUGGI
 
 fi
 
+if test "$enable_zstd_advanced_apis" != "no"; then
+
+$as_echo "#define ENABLE_ZSTD_ADVANCED_APIS 1" >>confdefs.h
+
+fi
 
 # systemd support
 if test "x$enable_systemd" = "xno"; then
@@ -5586,6 +5613,9 @@ fi
 
 if test "x$enable_expensive_hardening" = "xyes" || test "x$enable_fragile_hardening" = "xyes"; then
   fragile_hardening="yes"
+
+$as_echo "#define DEBUG_SMARTLIST 1" >>confdefs.h
+
 fi
 
 # Check whether --enable-linker-hardening was given.
@@ -5745,6 +5775,35 @@ fi
 
 fi
 
+
+
+
+# Check whether --enable-module-dirauth was given.
+if test "${enable_module_dirauth+set}" = set; then :
+  enableval=$enable_module_dirauth;
+else
+
+$as_echo "#define HAVE_MODULE_DIRAUTH 1" >>confdefs.h
+
+fi
+
+ if test "x$enable_module_dirauth" != "xno"; then
+  BUILD_MODULE_DIRAUTH_TRUE=
+  BUILD_MODULE_DIRAUTH_FALSE='#'
+else
+  BUILD_MODULE_DIRAUTH_TRUE='#'
+  BUILD_MODULE_DIRAUTH_FALSE=
+fi
+
+
+TOR_MODULES_ALL_ENABLED=
+
+
+    MODULE=DIRAUTH
+    TOR_MODULES_ALL_ENABLED="${TOR_MODULES_ALL_ENABLED} -DHAVE_MODULE_${MODULE}=1"
+
+
+
 if test -n "$ac_tool_prefix"; then
   for ac_prog in ar lib "link -lib"
   do
@@ -7369,7 +7428,10 @@ else
 fi
 
 
-rust_crates="libc-0.2.39"
+rust_crates=" \
+    digest-0.7.2 \
+    libc-0.2.39 \
+"
 
 
 
@@ -7835,6 +7897,8 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUI
  esac
 
 
+
+
 if test "x$enable_rust" = "xyes"; then
 
   # Extract the first word of "rustc", so it can be a program name with args.
@@ -7925,6 +7989,11 @@ fi
 
 $as_echo "#define HAVE_RUST 1" >>confdefs.h
 
+  if test "x$enable_fatal_warnings" = "xyes"; then
+    RUST_WARN=
+  else
+    RUST_WARN=#
+  fi
   if test "x$enable_cargo_online_mode" = "xyes"; then
     CARGO_ONLINE=
     RUST_DL=#
@@ -7963,13 +8032,31 @@ $as_echo "yes" >&6; }
   esac
 
       if test "$bwin32" = "true"; then
-    TOR_RUST_STATIC_NAME=tor_rust.lib
+    tor_rust_static_name=tor_rust.lib
   else
-    TOR_RUST_STATIC_NAME=libtor_rust.a
+    tor_rust_static_name=libtor_rust.a
   fi
 
 
 
+  if test -n "$TOR_RUST_TARGET"; then
+    if test "$host" = "$build"; then
+      as_fn_error $? "HOST = BUILD is invalid if TOR_RUST_TARGET is specified, see configure --help for more information." "$LINENO" 5
+    fi
+    RUST_TARGET_PROP="target = '$TOR_RUST_TARGET'"
+    TOR_RUST_LIB_PATH="src/rust/target/$TOR_RUST_TARGET/release/$tor_rust_static_name"
+  else
+    if test "$host" != "$build"; then
+      as_fn_error $? "TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled." "$LINENO" 5
+    fi
+    RUST_TARGET_PROP=
+    TOR_RUST_LIB_PATH="src/rust/target/release/$tor_rust_static_name"
+  fi
+
+
+
+
+
 
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking rust version" >&5
@@ -8331,7 +8418,8 @@ if test "$LIBS" != "$saved_LIBS"; then
    have_rt=yes
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5
+if test "$bwin32" = "false"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5
 $as_echo_n "checking for library containing pthread_create... " >&6; }
 if ${ac_cv_search_pthread_create+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -8387,7 +8475,7 @@ if test "$ac_res" != no; then :
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_detach" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_detach" >&5
 $as_echo_n "checking for library containing pthread_detach... " >&6; }
 if ${ac_cv_search_pthread_detach+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -8443,6 +8531,7 @@ if test "$ac_res" != no; then :
 
 fi
 
+fi
 
  if test "$bwin32" = "true"; then
   THREADS_WIN32_TRUE=
@@ -8487,9 +8576,9 @@ for ac_func in _NSGetEnviron \
         llround \
         localtime_r \
         lround \
-	mach_approximate_time \
         memmem \
         memset_s \
+        mmap \
 	pipe \
 	pipe2 \
         prctl \
@@ -8524,9 +8613,63 @@ fi
 done
 
 
-# Apple messed up when they added two functions functions in Sierra: they
+# Apple messed up when they added some functions: they
 # forgot to decorate them with appropriate AVAILABLE_MAC_OS_VERSION
-# checks. So we should only probe for those functions if we are sure that we
+# checks.
+
+# We should only probe for these functions if we are sure that we
+# are not targeting OS X 10.9 or earlier.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a pre-Yosemite OS X build target" >&5
+$as_echo_n "checking for a pre-Yosemite OS X build target... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __APPLE__
+#  include <AvailabilityMacros.h>
+#  ifndef MAC_OS_X_VERSION_10_10
+#    define MAC_OS_X_VERSION_10_10 101000
+#  endif
+#  if defined(MAC_OS_X_VERSION_MIN_REQUIRED)
+#    if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10
+#      error "Running on Mac OS X 10.9 or earlier"
+#    endif
+#  endif
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  on_macos_pre_10_10=no ; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+  on_macos_pre_10_10=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test "$on_macos_pre_10_10" = "no"; then
+  for ac_func in mach_approximate_time \
+
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+fi
+
+# We should only probe for these functions if we are sure that we
 # are not targeting OSX 10.11 or earlier.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a pre-Sierra OSX build target" >&5
 $as_echo_n "checking for a pre-Sierra OSX build target... " >&6; }
@@ -8659,6 +8802,44 @@ else
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether free(NULL) works" >&5
+$as_echo_n "checking whether free(NULL) works... " >&6; }
+if test "$cross_compiling" = yes; then :
+  free_null_ok=cross; { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross" >&5
+$as_echo "cross" >&6; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <stdlib.h>
+
+int
+main ()
+{
+
+char *p = NULL;
+free(p);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  free_null_ok=true; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  free_null_ok=false; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+if test "$free_null_ok" = "false"; then
+   as_fn_error $? "Your libc implementation doesn't allow free(NULL), as required by C99." "$LINENO" 5
+fi
+
 
 if test "$bwin32" = "true"; then
   TOR_LIB_WS32=-lws2_32
@@ -9394,11 +9575,13 @@ else
     # the binary?
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-struct ssl_method_st; const struct ssl_method_st *TLSv1_1_method(void);
+struct ssl_cipher_st;
+     unsigned SSL_CIPHER_get_id(const struct ssl_cipher_st *);
+     char *getenv(const char *);
 int
 main ()
 {
-TLSv1_1_method();
+                        if (getenv("THIS_SHOULDNT_BE_SET_X201803")) SSL_CIPHER_get_id((void *)0);
   ;
   return 0;
 }
@@ -9417,10 +9600,11 @@ rm -f core conftest.err conftest.$ac_obj
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <openssl/ssl.h>
+     char *getenv(const char *);
 int
 main ()
 {
-TLSv1_1_method();
+                        if (getenv("THIS_SHOULDNT_BE_SET_X201803")) SSL_CIPHER_get_id((void *)0);
   ;
   return 0;
 }
@@ -9602,11 +9786,13 @@ rm -f core conftest.err conftest.$ac_obj
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-struct ssl_method_st; const struct ssl_method_st *TLSv1_1_method(void);
+struct ssl_cipher_st;
+     unsigned SSL_CIPHER_get_id(const struct ssl_cipher_st *);
+     char *getenv(const char *);
 int
 main ()
 {
-TLSv1_1_method();
+                        if (getenv("THIS_SHOULDNT_BE_SET_X201803")) SSL_CIPHER_get_id((void *)0);
   ;
   return 0;
 }
@@ -9733,6 +9919,7 @@ for ac_func in  \
                 SSL_get_client_ciphers \
                 SSL_get_client_random \
 		SSL_CIPHER_find \
+                SSL_CTX_set_security_level \
 		TLS_method
 
 do :
@@ -9773,6 +9960,43 @@ _ACEOF
 fi
 
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of SHA_CTX" >&5
+$as_echo_n "checking size of SHA_CTX... " >&6; }
+if ${ac_cv_sizeof_SHA_CTX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (SHA_CTX))" "ac_cv_sizeof_SHA_CTX"        "$ac_includes_default
+#include <openssl/sha.h>
+
+"; then :
+
+else
+  if test "$ac_cv_type_SHA_CTX" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (SHA_CTX)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_SHA_CTX=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_SHA_CTX" >&5
+$as_echo "$ac_cv_sizeof_SHA_CTX" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHA_CTX $ac_cv_sizeof_SHA_CTX
+_ACEOF
+
+
+
 
 
     ac_fn_c_check_member "$LINENO" "struct tcp_info" "tcpi_unacked" "ac_cv_member_struct_tcp_info_tcpi_unacked" "#include <netinet/tcp.h>
@@ -10375,6 +10599,26 @@ $as_echo "#define HAVE_ZSTD 1" >>confdef
 
     TOR_ZSTD_CFLAGS="${ZSTD_CFLAGS}"
     TOR_ZSTD_LIBS="${ZSTD_LIBS}"
+
+        save_LIBS="$LIBS"
+    save_CFLAGS="$CFLAGS"
+    LIBS="$LIBS $ZSTD_LIBS"
+    CFLAGS="$CFLAGS $ZSTD_CFLAGS"
+    for ac_func in ZSTD_estimateCStreamSize \
+                   ZSTD_estimateDCtxSize
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+    LIBS="$save_LIBS"
+    CFLAGS="$save_CFLAGS"
 fi
 
 
@@ -11206,6 +11450,24 @@ $as_echo "$tor_cv_cflags__fno_omit_frame
 
 fi
 
+RUST_LINKER_OPTIONS=""
+if test "x$have_clang" = "xyes"; then
+	if test "x$CFLAGS_ASAN" != "x"; then
+		RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS $CFLAGS_ASAN"
+	fi
+	if test "x$CFLAGS_UBSAN" != "x"; then
+        	RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS $CFLAGS_UBSAN"
+	fi
+else
+	if test "x$CFLAGS_ASAN" != "x"; then
+		RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -lasan"
+	fi
+	if test "x$CFLAGS_UBSAN" != "x"; then
+        	RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -lubsan"
+	fi
+fi
+
+
 CFLAGS_BUGTRAP="$CFLAGS_FTRAPV $CFLAGS_ASAN $CFLAGS_UBSAN"
 CFLAGS_CONSTTIME="$CFLAGS_FWRAPV"
 
@@ -11914,7 +12176,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
@@ -11960,7 +12222,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
@@ -11984,7 +12246,7 @@ rm -f core conftest.err conftest.$ac_obj
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
@@ -12029,7 +12291,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
@@ -12053,7 +12315,7 @@ rm -f core conftest.err conftest.$ac_obj
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
@@ -13663,6 +13925,44 @@ _ACEOF
 
 
 
+# Let's see if stdatomic works. (There are some debian clangs that screw it
+# up; see Tor bug #26779 and debian bug 903709.)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C11 stdatomic.h actually works" >&5
+$as_echo_n "checking whether C11 stdatomic.h actually works... " >&6; }
+if ${tor_cv_stdatomic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdatomic.h>
+struct x { atomic_size_t y; };
+void try_atomic_init(struct x *xx)
+{
+  atomic_init(&xx->y, 99);
+  atomic_fetch_add(&xx->y, 1);
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  tor_cv_stdatomic_works=yes
+else
+  tor_cv_stdatomic_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_stdatomic_works" >&5
+$as_echo "$tor_cv_stdatomic_works" >&6; }
+
+if test "$tor_cv_stdatomic_works" = "yes"; then
+
+$as_echo "#define STDATOMIC_WORKS 1" >>confdefs.h
+
+elif test "$ac_cv_header_stdatomic_h" = "yes"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your compiler provides the stdatomic.h header, but it doesn't seem to work.  I'll pretend it isn't there. If you are using Clang on Debian, maybe this is because of https://bugs.debian.org/903709 " >&5
+$as_echo "$as_me: WARNING: Your compiler provides the stdatomic.h header, but it doesn't seem to work.  I'll pretend it isn't there. If you are using Clang on Debian, maybe this is because of https://bugs.debian.org/903709 " >&2;}
+fi
+
 # Now make sure that NULL can be represented as zero bytes.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memset(0) sets pointers to NULL" >&5
 $as_echo_n "checking whether memset(0) sets pointers to NULL... " >&6; }
@@ -14050,6 +14350,72 @@ fi
 done
 
 fi
+if test "$using_custom_malloc" = "yes"; then
+  # Tell the C compiler not to use the system allocator functions.
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts -fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free" >&5
+$as_echo_n "checking whether the compiler accepts -fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free... " >&6; }
+if ${tor_cv_cflags__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    tor_saved_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -pedantic -Werror -fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  tor_cv_cflags__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free=yes
+else
+  tor_cv_cflags__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test x != x; then
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  tor_can_link__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free=yes
+else
+  tor_can_link__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+    fi
+    CFLAGS="$tor_saved_CFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_cflags__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free" >&5
+$as_echo "$tor_cv_cflags__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free" >&6; }
+  if test x$tor_cv_cflags__fno_builtin_malloc__fno_builtin_realloc__fno_builtin_calloc__fno_builtin_free = xyes; then
+     CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free"
+  else
+     true
+  fi
+
+
+
+fi
 
 # By default, we're going to assume we don't have mlockall()
 # bionic and other platforms have various broken mlockall subsystems.
@@ -14082,25 +14448,6 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-# Some MinGW environments don't have getpagesize in unistd.h. We don't use
-# AC_CHECK_FUNCS(getpagesize), because other environments rename getpagesize
-# using macros
-ac_fn_c_check_decl "$LINENO" "getpagesize" "ac_cv_have_decl_getpagesize" "
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-"
-if test "x$ac_cv_have_decl_getpagesize" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETPAGESIZE $ac_have_decl
-_ACEOF
-
-
 # Allow user to specify an alternate syslog facility
 
 # Check whether --with-syslog-facility was given.
@@ -14381,6 +14728,15 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+if test "x$SRCDIR" = "x"; then
+  SRCDIR=$(cd "$srcdir"; pwd)
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define SRCDIR "$SRCDIR"
+_ACEOF
+
+
 if test "x$CONFDIR" = "x"; then
   CONFDIR=`eval echo $sysconfdir/tor`
 fi
@@ -27279,6 +27635,11 @@ $as_echo "#define HAVE_CFLAG_WNULL_DEREF
 $as_echo "#define HAVE_CFLAG_WOVERLENGTH_STRINGS 1" >>confdefs.h
 
   fi
+  if test "$tor_cv_cflags__warn_unused_const_variable_2" = "yes"; then
+
+$as_echo "#define HAVE_CFLAG_WUNUSED_CONST_VARIABLE 1" >>confdefs.h
+
+  fi
 
   if test "x$enable_fatal_warnings" = "xyes"; then
     # I'd like to use TOR_CHECK_CFLAGS here, but I can't, since the
@@ -27298,7 +27659,7 @@ fi
 
 CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_zlib"
 
-ac_config_files="$ac_config_files Doxyfile Makefile contrib/dist/suse/tor.sh contrib/operator-tools/tor.logrotate contrib/dist/tor.sh contrib/dist/torctl contrib/dist/tor.service src/config/torrc.sample src/config/torrc.minimal src/rust/.cargo/config scripts/maint/checkOptionDocs.pl scripts/maint/updateVersions.pl"
+ac_config_files="$ac_config_files Doxyfile Makefile config.rust link_rust.sh contrib/dist/suse/tor.sh contrib/operator-tools/tor.logrotate contrib/dist/tor.sh contrib/dist/torctl contrib/dist/tor.service src/config/torrc.sample src/config/torrc.minimal src/rust/.cargo/config scripts/maint/checkOptionDocs.pl scripts/maint/updateVersions.pl"
 
 
 if test "x$asciidoc" = "xtrue" && test "$ASCIIDOC" = "none"; then
@@ -27515,6 +27876,10 @@ if test -z "${USE_ANDROID_TRUE}" && test
   as_fn_error $? "conditional \"USE_ANDROID\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_MODULE_DIRAUTH_TRUE}" && test -z "${BUILD_MODULE_DIRAUTH_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_MODULE_DIRAUTH\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -27961,7 +28326,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by tor $as_me 0.3.3.9, which was
+This file was extended by tor $as_me 0.3.4.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -28027,7 +28392,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-tor config.status 0.3.3.9
+tor config.status 0.3.4.8
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -28160,6 +28525,8 @@ do
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "config.rust") CONFIG_FILES="$CONFIG_FILES config.rust" ;;
+    "link_rust.sh") CONFIG_FILES="$CONFIG_FILES link_rust.sh" ;;
     "contrib/dist/suse/tor.sh") CONFIG_FILES="$CONFIG_FILES contrib/dist/suse/tor.sh" ;;
     "contrib/operator-tools/tor.logrotate") CONFIG_FILES="$CONFIG_FILES contrib/operator-tools/tor.logrotate" ;;
     "contrib/dist/tor.sh") CONFIG_FILES="$CONFIG_FILES contrib/dist/tor.sh" ;;
diff -pruN 0.3.3.9-1/configure.ac 0.3.4.8-1/configure.ac
--- 0.3.3.9-1/configure.ac	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/configure.ac	2018-09-07 13:49:53.000000000 +0000
@@ -4,7 +4,7 @@ dnl Copyright (c) 2007-2017, The Tor Pro
 dnl See LICENSE for licensing information
 
 AC_PREREQ([2.63])
-AC_INIT([tor],[0.3.3.9])
+AC_INIT([tor],[0.3.4.8])
 AC_CONFIG_SRCDIR([src/or/main.c])
 AC_CONFIG_MACRO_DIR([m4])
 
@@ -61,6 +61,8 @@ AC_ARG_ENABLE(cargo-online-mode,
    AS_HELP_STRING(--enable-cargo-online-mode, [Allow cargo to make network requests to fetch crates. For builds with rust only.]))
 AC_ARG_ENABLE(restart-debugging,
    AS_HELP_STRING(--enable-restart-debugging, [Build Tor with support for debugging in-process restart. Developers only.]))
+AC_ARG_ENABLE(zstd-advanced-apis,
+   AS_HELP_STRING(--disable-zstd-advanced-apis, [Build without support for zstd's "static-only" APIs.]))
 
 if test "x$enable_coverage" != "xyes" -a "x$enable_asserts_in_tests" = "xno" ; then
     AC_MSG_ERROR([Can't disable assertions outside of coverage build])
@@ -114,6 +116,10 @@ if test "$enable_restart_debugging" = "y
             [Defined if we're building with support for in-process restart debugging.])
 fi
 
+if test "$enable_zstd_advanced_apis" != "no"; then
+   AC_DEFINE(ENABLE_ZSTD_ADVANCED_APIS, 1,
+             [Defined if we're going to try to use zstd's "static-only" APIs.])
+fi
 
 # systemd support
 if test "x$enable_systemd" = "xno"; then
@@ -170,6 +176,7 @@ AC_ARG_ENABLE(fragile-hardening,
     AS_HELP_STRING(--enable-fragile-hardening, [enable more fragile and expensive compiler hardening; makes Tor slower]))
 if test "x$enable_expensive_hardening" = "xyes" || test "x$enable_fragile_hardening" = "xyes"; then
   fragile_hardening="yes"
+  AC_DEFINE(DEBUG_SMARTLIST, 1, [Enable smartlist debugging])
 fi
 
 dnl Linker hardening options
@@ -224,6 +231,31 @@ if test "x$enable_android" = "xyes"; the
 
 fi
 
+dnl ---
+dnl Tor modules options. These options are namespaced with --disable-module-XXX
+dnl ---
+
+dnl All our modules.
+m4_define(MODULES, dirauth)
+
+dnl Directory Authority module.
+AC_ARG_ENABLE([module-dirauth],
+              AS_HELP_STRING([--disable-module-dirauth],
+                             [Do not build tor with the dirauth module]),
+              [], dnl Action if-given
+              AC_DEFINE([HAVE_MODULE_DIRAUTH], [1],
+                        [Compile with Directory Authority feature support]))
+AM_CONDITIONAL(BUILD_MODULE_DIRAUTH, [test "x$enable_module_dirauth" != "xno"])
+
+dnl Helper variables.
+TOR_MODULES_ALL_ENABLED=
+AC_DEFUN([ADD_MODULE], [
+    MODULE=m4_toupper($1)
+    TOR_MODULES_ALL_ENABLED="${TOR_MODULES_ALL_ENABLED} -DHAVE_MODULE_${MODULE}=1"
+])
+m4_foreach_w([module], MODULES, [ADD_MODULE([module])])
+AC_SUBST(TOR_MODULES_ALL_ENABLED)
+
 dnl check for the correct "ar" when cross-compiling.
 dnl   (AM_PROG_AR was new in automake 1.11.2, which we do not yet require,
 dnl    so kludge up a replacement for the case where it isn't there yet.)
@@ -279,7 +311,10 @@ fi
 AM_CONDITIONAL(USEPYTHON, [test "x$PYTHON" != "x"])
 
 dnl List all external rust crates we depend on here. Include the version
-rust_crates="libc-0.2.39"
+rust_crates=" \
+    digest-0.7.2 \
+    libc-0.2.39 \
+"
 AC_SUBST(rust_crates)
 
 ifdef([AC_C_FLEXIBLE_ARRAY_MEMBER], [
@@ -418,6 +453,8 @@ fi
 
 AC_C_BIGENDIAN
 
+AC_ARG_VAR([TOR_RUST_TARGET], [Rust target, must be specified when cross-compiling (HOST != BUILD). example: i686-pc-windows-gnu])
+
 if test "x$enable_rust" = "xyes"; then
   AC_ARG_VAR([RUSTC], [path to the rustc binary])
   AC_CHECK_PROG([RUSTC], [rustc], [rustc],[no])
@@ -432,6 +469,11 @@ if test "x$enable_rust" = "xyes"; then
   fi
 
   AC_DEFINE([HAVE_RUST], 1, [have Rust])
+  if test "x$enable_fatal_warnings" = "xyes"; then
+    RUST_WARN=
+  else
+    RUST_WARN=#
+  fi
   if test "x$enable_cargo_online_mode" = "xyes"; then
     CARGO_ONLINE=
     RUST_DL=#
@@ -478,13 +520,31 @@ if test "x$enable_rust" = "xyes"; then
   dnl For now both MSVC and MinGW rust libraries will output static libs with
   dnl the MSVC naming convention.
   if test "$bwin32" = "true"; then
-    TOR_RUST_STATIC_NAME=tor_rust.lib
+    tor_rust_static_name=tor_rust.lib
   else
-    TOR_RUST_STATIC_NAME=libtor_rust.a
+    tor_rust_static_name=libtor_rust.a
   fi
 
-  AC_SUBST(TOR_RUST_STATIC_NAME)
+  AC_CANONICAL_BUILD
+
+  if test -n "$TOR_RUST_TARGET"; then
+    if test "$host" = "$build"; then
+      AC_MSG_ERROR([HOST = BUILD is invalid if TOR_RUST_TARGET is specified, see configure --help for more information.])
+    fi
+    RUST_TARGET_PROP="target = '$TOR_RUST_TARGET'"
+    TOR_RUST_LIB_PATH="src/rust/target/$TOR_RUST_TARGET/release/$tor_rust_static_name"
+  else
+    if test "$host" != "$build"; then
+      AC_MSG_ERROR([TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled.])
+    fi
+    RUST_TARGET_PROP=
+    TOR_RUST_LIB_PATH="src/rust/target/release/$tor_rust_static_name"
+  fi
+
+  AC_SUBST(RUST_TARGET_PROP)
+  AC_SUBST(TOR_RUST_LIB_PATH)
   AC_SUBST(CARGO_ONLINE)
+  AC_SUBST(RUST_WARN)
   AC_SUBST(RUST_DL)
 
   dnl Let's check the rustc version, too
@@ -515,8 +575,10 @@ if test "$LIBS" != "$saved_LIBS"; then
    have_rt=yes
 fi
 
-AC_SEARCH_LIBS(pthread_create, [pthread])
-AC_SEARCH_LIBS(pthread_detach, [pthread])
+if test "$bwin32" = "false"; then
+  AC_SEARCH_LIBS(pthread_create, [pthread])
+  AC_SEARCH_LIBS(pthread_detach, [pthread])
+fi
 
 AM_CONDITIONAL(THREADS_WIN32, test "$bwin32" = "true")
 AM_CONDITIONAL(THREADS_PTHREADS, test "$bwin32" = "false")
@@ -548,9 +610,9 @@ AC_CHECK_FUNCS(
         llround \
         localtime_r \
         lround \
-	mach_approximate_time \
         memmem \
         memset_s \
+        mmap \
 	pipe \
 	pipe2 \
         prctl \
@@ -574,9 +636,36 @@ AC_CHECK_FUNCS(
 	_vscprintf
 )
 
-# Apple messed up when they added two functions functions in Sierra: they
+# Apple messed up when they added some functions: they
 # forgot to decorate them with appropriate AVAILABLE_MAC_OS_VERSION
-# checks. So we should only probe for those functions if we are sure that we
+# checks.
+
+# We should only probe for these functions if we are sure that we
+# are not targeting OS X 10.9 or earlier.
+AC_MSG_CHECKING([for a pre-Yosemite OS X build target])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef __APPLE__
+#  include <AvailabilityMacros.h>
+#  ifndef MAC_OS_X_VERSION_10_10
+#    define MAC_OS_X_VERSION_10_10 101000
+#  endif
+#  if defined(MAC_OS_X_VERSION_MIN_REQUIRED)
+#    if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10
+#      error "Running on Mac OS X 10.9 or earlier"
+#    endif
+#  endif
+#endif
+]], [[]])],
+   [on_macos_pre_10_10=no ; AC_MSG_RESULT([no])],
+   [on_macos_pre_10_10=yes; AC_MSG_RESULT([yes])])
+
+if test "$on_macos_pre_10_10" = "no"; then
+  AC_CHECK_FUNCS(
+        mach_approximate_time \
+  )
+fi
+
+# We should only probe for these functions if we are sure that we
 # are not targeting OSX 10.11 or earlier.
 AC_MSG_CHECKING([for a pre-Sierra OSX build target])
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
@@ -619,6 +708,21 @@ fi
 AM_CONDITIONAL(BUILD_READPASSPHRASE_C,
   test "x$ac_cv_func_readpassphrase" = "xno" && test "$bwin32" = "false")
 
+AC_MSG_CHECKING([whether free(NULL) works])
+AC_RUN_IFELSE([AC_LANG_PROGRAM([
+  #include <stdlib.h>
+], [
+char *p = NULL;
+free(p);
+])],
+[free_null_ok=true; AC_MSG_RESULT(yes)],
+[free_null_ok=false; AC_MSG_RESULT(no)],
+[free_null_ok=cross; AC_MSG_RESULT(cross)])
+
+if test "$free_null_ok" = "false"; then
+   AC_MSG_ERROR([Your libc implementation doesn't allow free(NULL), as required by C99.])
+fi
+
 dnl ------------------------------------------------------
 dnl Where do you live, libevent?  And how do we call you?
 
@@ -770,9 +874,18 @@ AC_ARG_WITH(ssl-dir,
 
 AC_MSG_NOTICE([Now, we'll look for OpenSSL >= 1.0.1])
 TOR_SEARCH_LIBRARY(openssl, $tryssldir, [-lssl -lcrypto $TOR_LIB_GDI $TOR_LIB_WS32],
-    [#include <openssl/ssl.h>],
-    [struct ssl_method_st; const struct ssl_method_st *TLSv1_1_method(void);],
-    [TLSv1_1_method();], [],
+    [#include <openssl/ssl.h>
+     char *getenv(const char *);],
+    [struct ssl_cipher_st;
+     unsigned SSL_CIPHER_get_id(const struct ssl_cipher_st *);
+     char *getenv(const char *);],
+    dnl This funny-looking test program calls getenv, so that the compiler
+    dnl will neither make code that call SSL_CIPHER_get_id(NULL) [producing
+    dnl a crash], nor optimize out the call to SSL_CIPHER_get_id().
+    dnl We look for SSL_cipher_get_id() because it is present in
+    dnl OpenSSL >=1.0.1, because it is not deprecated, and because Tor
+    dnl depends on it.
+    [if (getenv("THIS_SHOULDNT_BE_SET_X201803")) SSL_CIPHER_get_id((void *)0);], [],
     [/usr/local/opt/openssl /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /opt/openssl])
 
 dnl XXXX check for OPENSSL_VERSION_NUMBER == SSLeay()
@@ -828,6 +941,7 @@ AC_CHECK_FUNCS([ \
                 SSL_get_client_ciphers \
                 SSL_get_client_random \
 		SSL_CIPHER_find \
+                SSL_CTX_set_security_level \
 		TLS_method
 	       ])
 
@@ -839,6 +953,10 @@ AC_CHECK_MEMBERS([SSL.state], , ,
 [#include <openssl/ssl.h>
 ])
 
+AC_CHECK_SIZEOF(SHA_CTX, , [AC_INCLUDES_DEFAULT()
+#include <openssl/sha.h>
+])
+
 dnl Define the set of checks for KIST scheduler support.
 AC_DEFUN([CHECK_KIST_SUPPORT],[
   dnl KIST needs struct tcp_info and for certain members to exist.
@@ -957,6 +1075,16 @@ if test "x$have_zstd" = "xyes"; then
     AC_DEFINE(HAVE_ZSTD,1,[Have Zstd])
     TOR_ZSTD_CFLAGS="${ZSTD_CFLAGS}"
     TOR_ZSTD_LIBS="${ZSTD_LIBS}"
+
+    dnl now check for zstd functions
+    save_LIBS="$LIBS"
+    save_CFLAGS="$CFLAGS"
+    LIBS="$LIBS $ZSTD_LIBS"
+    CFLAGS="$CFLAGS $ZSTD_CFLAGS"
+    AC_CHECK_FUNCS(ZSTD_estimateCStreamSize \
+                   ZSTD_estimateDCtxSize)
+    LIBS="$save_LIBS"
+    CFLAGS="$save_CFLAGS"
 fi
 AC_SUBST(TOR_ZSTD_CFLAGS)
 AC_SUBST(TOR_ZSTD_LIBS)
@@ -1042,6 +1170,33 @@ if test "$fragile_hardening" = "yes"; th
 TOR_CHECK_CFLAGS([-fno-omit-frame-pointer])
 fi
 
+dnl Find the correct libraries to add in order to use the sanitizers.
+dnl
+dnl When building Rust, Cargo will run the linker with the -nodefaultlibs
+dnl option, which will prevent the compiler from linking the sanitizer
+dnl libraries it needs.  We need to specify them manually.
+dnl
+dnl What's more, we need to specify them in a linker script rather than
+dnl from build.rs: these options aren't allowed in the cargo:rustc-flags
+dnl variable.
+RUST_LINKER_OPTIONS=""
+if test "x$have_clang" = "xyes"; then
+	if test "x$CFLAGS_ASAN" != "x"; then
+		RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS $CFLAGS_ASAN"
+	fi
+	if test "x$CFLAGS_UBSAN" != "x"; then
+        	RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS $CFLAGS_UBSAN"
+	fi
+else
+	if test "x$CFLAGS_ASAN" != "x"; then
+		RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -lasan"
+	fi
+	if test "x$CFLAGS_UBSAN" != "x"; then
+        	RUST_LINKER_OPTIONS="$RUST_LINKER_OPTIONS -lubsan"
+	fi
+fi
+AC_SUBST(RUST_LINKER_OPTIONS)
+
 CFLAGS_BUGTRAP="$CFLAGS_FTRAPV $CFLAGS_ASAN $CFLAGS_UBSAN"
 CFLAGS_CONSTTIME="$CFLAGS_FWRAPV"
 
@@ -1531,6 +1686,26 @@ AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDE
 
 AC_CHECK_SIZEOF(cell_t)
 
+# Let's see if stdatomic works. (There are some debian clangs that screw it
+# up; see Tor bug #26779 and debian bug 903709.)
+AC_CACHE_CHECK([whether C11 stdatomic.h actually works],
+               tor_cv_stdatomic_works,
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#include <stdatomic.h>
+struct x { atomic_size_t y; };
+void try_atomic_init(struct x *xx)
+{
+  atomic_init(&xx->y, 99);
+  atomic_fetch_add(&xx->y, 1);
+}
+]])], [tor_cv_stdatomic_works=yes], [tor_cv_stdatomic_works=no])])
+
+if test "$tor_cv_stdatomic_works" = "yes"; then
+   AC_DEFINE(STDATOMIC_WORKS, 1, [Set to 1 if we can compile a simple stdatomic example.])
+elif test "$ac_cv_header_stdatomic_h" = "yes"; then
+   AC_MSG_WARN([Your compiler provides the stdatomic.h header, but it doesn't seem to work.  I'll pretend it isn't there. If you are using Clang on Debian, maybe this is because of https://bugs.debian.org/903709 ])
+fi
+
 # Now make sure that NULL can be represented as zero bytes.
 AC_CACHE_CHECK([whether memset(0) sets pointers to NULL], tor_cv_null_is_zero,
 [AC_RUN_IFELSE([AC_LANG_SOURCE(
@@ -1698,6 +1873,10 @@ fi
 if test "$using_custom_malloc" = "no"; then
    AC_CHECK_FUNCS(mallinfo)
 fi
+if test "$using_custom_malloc" = "yes"; then
+  # Tell the C compiler not to use the system allocator functions.
+  TOR_CHECK_CFLAGS([-fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free])
+fi
 
 # By default, we're going to assume we don't have mlockall()
 # bionic and other platforms have various broken mlockall subsystems.
@@ -1709,14 +1888,6 @@ AC_CHECK_DECLS([mlockall], , , [
 #include <sys/mman.h>
 #endif])
 
-# Some MinGW environments don't have getpagesize in unistd.h. We don't use
-# AC_CHECK_FUNCS(getpagesize), because other environments rename getpagesize
-# using macros
-AC_CHECK_DECLS([getpagesize], , , [
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif])
-
 # Allow user to specify an alternate syslog facility
 AC_ARG_WITH(syslog-facility,
 AS_HELP_STRING(--with-syslog-facility=LOG, [syslog facility to use (default=LOG_DAEMON)]),
@@ -1854,6 +2025,12 @@ AC_SUBST(BUILDDIR)
 AH_TEMPLATE([BUILDDIR],[tor's build directory])
 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
 
+if test "x$SRCDIR" = "x"; then
+  SRCDIR=$(cd "$srcdir"; pwd)
+fi
+AH_TEMPLATE([SRCDIR],[tor's sourcedir directory])
+AC_DEFINE_UNQUOTED(SRCDIR,"$SRCDIR")
+
 if test "x$CONFDIR" = "x"; then
   CONFDIR=`eval echo $sysconfdir/tor`
 fi
@@ -2172,6 +2349,9 @@ dnl     -Wthread-safety-precise
   if test "$tor_cv_cflags__Woverlength_strings" = "yes"; then
     AC_DEFINE([HAVE_CFLAG_WOVERLENGTH_STRINGS], 1, [True if we have -Woverlength-strings])
   fi
+  if test "$tor_cv_cflags__warn_unused_const_variable_2" = "yes"; then
+    AC_DEFINE([HAVE_CFLAG_WUNUSED_CONST_VARIABLE], 1, [True if we have -Wunused-const-variable])
+  fi
 
   if test "x$enable_fatal_warnings" = "xyes"; then
     # I'd like to use TOR_CHECK_CFLAGS here, but I can't, since the
@@ -2193,6 +2373,8 @@ CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libeve
 AC_CONFIG_FILES([
         Doxyfile
         Makefile
+        config.rust
+        link_rust.sh
         contrib/dist/suse/tor.sh
         contrib/operator-tools/tor.logrotate
         contrib/dist/tor.sh
diff -pruN 0.3.3.9-1/contrib/win32build/tor-mingw.nsi.in 0.3.4.8-1/contrib/win32build/tor-mingw.nsi.in
--- 0.3.3.9-1/contrib/win32build/tor-mingw.nsi.in	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/contrib/win32build/tor-mingw.nsi.in	2018-09-07 13:49:53.000000000 +0000
@@ -8,7 +8,7 @@
 !include "LogicLib.nsh"
 !include "FileFunc.nsh"
 !insertmacro GetParameters
-!define VERSION "0.3.3.8-dev"
+!define VERSION "0.3.4.8"
 !define INSTALLER "tor-${VERSION}-win32.exe"
 !define WEBSITE "https://www.torproject.org/"
 !define LICENSE "LICENSE"
diff -pruN 0.3.3.9-1/CONTRIBUTING 0.3.4.8-1/CONTRIBUTING
--- 0.3.3.9-1/CONTRIBUTING	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/CONTRIBUTING	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,39 @@
+Contributing to Tor
+-------------------
+
+### Getting started
+
+Welcome!
+
+We have a bunch of documentation about how to develop Tor in the
+doc/HACKING/ directory.  We recommend that you start with
+doc/HACKING/README.1st.md , and then go from there.  It will tell
+you how to find your way around the source code, how to get
+involved with the Tor community, how to write patches, and much
+more!
+
+You don't have to be a C developer to help with Tor: have a look
+at https://www.torproject.org/getinvolved/volunteer !
+
+The Tor Project is committed to fostering a inclusive community
+where people feel safe to engage, share their points of view, and
+participate. For the latest version of our Code of Conduct, please
+see
+
+https://gitweb.torproject.org/community/policies.git/plain/code_of_conduct.txt
+
+
+
+### License issues
+
+Tor is distributed under the license terms in the LICENSE -- in
+brief, the "3-clause BSD license".  If you send us code to
+distribute with Tor, it needs to be code that we can distribute
+under those terms.  Please don't send us patches unless you agree
+to allow this.
+
+Some compatible licenses include:
+
+  - 3-clause BSD
+  - 2-clause BSD
+  - CC0 Public Domain Dedication
diff -pruN 0.3.3.9-1/debian/changelog 0.3.4.8-1/debian/changelog
--- 0.3.3.9-1/debian/changelog	2018-09-12 16:45:29.000000000 +0000
+++ 0.3.4.8-1/debian/changelog	2018-09-12 16:45:30.000000000 +0000
@@ -1,28 +1,57 @@
-tor (0.3.3.9-1) unstable; urgency=medium
+tor (0.3.4.8-1) unstable; urgency=medium
+
+  * New upstream version, upload 0.3.4.x tree to unstable.
+  * Includes, among other changes:
+    - Tell OpenSSL to maintain backward compatibility with previous
+      RSA1024/DH1024 users in Tor. With OpenSSL 1.1.1-pre6, these
+      ciphers are disabled by default. Closes ticket 27344.
+      closes: #907351
+
+ -- Peter Palfrader <weasel@debian.org>  Tue, 11 Sep 2018 14:23:51 +0200
+
+tor (0.3.4.7-rc-1) experimental; urgency=medium
+
+  * New upstream version.
+
+ -- Peter Palfrader <weasel@debian.org>  Fri, 24 Aug 2018 23:42:51 +0200
+
+tor (0.3.4.6-rc-1) experimental; urgency=medium
+
+  * New upstream version.
+
+ -- Peter Palfrader <weasel@debian.org>  Wed, 08 Aug 2018 08:38:06 +0200
+
+tor (0.3.4.5-rc-1) experimental; urgency=medium
+
+  * New upstream version.
+
+ -- Peter Palfrader <weasel@debian.org>  Sat, 14 Jul 2018 01:37:14 +0200
+
+tor (0.3.4.4-rc-1) experimental; urgency=medium
 
   * New upstream version.
 
- -- Peter Palfrader <weasel@debian.org>  Fri, 13 Jul 2018 22:24:19 +0200
+ -- Peter Palfrader <weasel@debian.org>  Tue, 10 Jul 2018 14:19:16 +0200
 
-tor (0.3.3.8-1) unstable; urgency=medium
+tor (0.3.4.3-alpha-1) experimental; urgency=medium
 
   * New upstream version.
 
- -- Peter Palfrader <weasel@debian.org>  Tue, 10 Jul 2018 10:50:11 +0200
+ -- Peter Palfrader <weasel@debian.org>  Tue, 26 Jun 2018 18:22:48 +0200
 
-tor (0.3.3.7-1) unstable; urgency=medium
+tor (0.3.4.2-alpha-1) experimental; urgency=medium
 
   * New upstream version.
 
- -- Peter Palfrader <weasel@debian.org>  Wed, 13 Jun 2018 09:31:15 +0200
+ -- Peter Palfrader <weasel@debian.org>  Wed, 13 Jun 2018 09:34:10 +0200
 
-tor (0.3.3.6-1) unstable; urgency=medium
+tor (0.3.4.1-alpha-1) experimental; urgency=medium
 
-  * New upstream version, upload 0.3.3.x tree to unstable.
+  * New upstream tree.
   * Start using upstream's minimal torrc as our default /etc/tor/torrc.
   * Put longer torrc.sample into /usr/share/doc.
 
- -- Peter Palfrader <weasel@debian.org>  Wed, 23 May 2018 00:08:43 +0200
+ -- Peter Palfrader <weasel@debian.org>  Fri, 18 May 2018 10:33:45 +0200
 
 tor (0.3.3.5-rc-1) experimental; urgency=medium
 
diff -pruN 0.3.3.9-1/debian/micro-revision.i 0.3.4.8-1/debian/micro-revision.i
--- 0.3.3.9-1/debian/micro-revision.i	2018-09-12 16:45:29.000000000 +0000
+++ 0.3.4.8-1/debian/micro-revision.i	2018-09-12 16:45:30.000000000 +0000
@@ -1 +1 @@
-"ca1a436fa8e53a32"
+"5da0e95e4871a0a1"
diff -pruN 0.3.3.9-1/depcomp 0.3.4.8-1/depcomp
--- 0.3.3.9-1/depcomp	2018-07-12 17:17:00.000000000 +0000
+++ 0.3.4.8-1/depcomp	2018-06-25 18:12:07.000000000 +0000
@@ -1,9 +1,9 @@
-#! /bin/sh
+#!/bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2013-05-30.07; # UTC
+scriptversion=2016-01-11.22; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -786,6 +786,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -pruN 0.3.3.9-1/doc/HACKING/CodingStandards.md 0.3.4.8-1/doc/HACKING/CodingStandards.md
--- 0.3.3.9-1/doc/HACKING/CodingStandards.md	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/CodingStandards.md	2018-06-15 21:20:53.000000000 +0000
@@ -42,6 +42,23 @@ If you have changed build system compone
    - For example, if you have changed Makefiles, autoconf files, or anything
      else that affects the build system.
 
+License issues
+==============
+
+Tor is distributed under the license terms in the LICENSE -- in
+brief, the "3-clause BSD license".  If you send us code to
+distribute with Tor, it needs to be code that we can distribute
+under those terms.  Please don't send us patches unless you agree
+to allow this.
+
+Some compatible licenses include:
+
+  - 3-clause BSD
+  - 2-clause BSD
+  - CC0 Public Domain Dedication
+
+
+
 How we use Git branches
 =======================
 
@@ -417,3 +434,4 @@ the functions that call your function re
 function should mention that it does that something in the documentation.  If
 you rely on a function doing something beyond what is in its documentation,
 then you should watch out, or it might do something else later.
+
diff -pruN 0.3.3.9-1/doc/HACKING/CodingStandardsRust.md 0.3.4.8-1/doc/HACKING/CodingStandardsRust.md
--- 0.3.3.9-1/doc/HACKING/CodingStandardsRust.md	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/CodingStandardsRust.md	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,523 @@
+
+ Rust Coding Standards
+=======================
+
+You MUST follow the standards laid out in `.../doc/HACKING/CodingStandards.md`,
+where applicable.
+
+ Module/Crate Declarations
+---------------------------
+
+Each Tor C module which is being rewritten MUST be in its own crate.
+See the structure of `.../src/rust` for examples.
+
+In your crate, you MUST use `lib.rs` ONLY for pulling in external
+crates (e.g. `extern crate libc;`) and exporting public objects from
+other Rust modules (e.g. `pub use mymodule::foo;`).  For example, if
+you create a crate in `.../src/rust/yourcrate`, your Rust code should
+live in `.../src/rust/yourcrate/yourcode.rs` and the public interface
+to it should be exported in `.../src/rust/yourcrate/lib.rs`.
+
+If your code is to be called from Tor C code, you MUST define a safe
+`ffi.rs`.  See the "Safety" section further down for more details.
+
+For example, in a hypothetical `tor_addition` Rust module:
+
+In `.../src/rust/tor_addition/addition.rs`:
+
+    pub fn get_sum(a: i32, b: i32) -> i32 {
+        a + b
+    }
+
+In `.../src/rust/tor_addition/lib.rs`:
+
+    pub use addition::*;
+
+In `.../src/rust/tor_addition/ffi.rs`:
+
+    #[no_mangle]
+    pub extern "C" fn tor_get_sum(a: c_int, b: c_int) -> c_int {
+        get_sum(a, b)
+    }
+
+If your Rust code must call out to parts of Tor's C code, you must
+declare the functions you are calling in the `external` crate, located
+at `.../src/rust/external`.
+
+<!-- XXX get better examples of how to declare these externs, when/how they -->
+<!-- XXX are unsafe, what they are expected to do —isis                     -->
+
+Modules should strive to be below 500 lines (tests excluded). Single
+responsibility and limited dependencies should be a guiding standard.
+
+If you have any external modules as dependencies (e.g. `extern crate
+libc;`), you MUST declare them in your crate's `lib.rs` and NOT in any
+other module.
+
+ Dependencies and versions
+---------------------------
+
+In general, we use modules from only the Rust standard library
+whenever possible. We will review including external crates on a
+case-by-case basis.
+
+If a crate only contains traits meant for compatibility between Rust
+crates, such as [the digest crate](https://crates.io/crates/digest) or
+[the failure crate](https://crates.io/crates/failure), it is very likely
+permissible to add it as a dependency.  However, a brief review should
+be conducted as to the usefulness of implementing external traits
+(i.e. how widespread is the usage, how many other crates either
+implement the traits or have trait bounds based upon them), as well as
+the stability of the traits (i.e. if the trait is going to change, we'll
+potentially have to re-do all our implementations of it).
+
+For large external libraries, especially which implement features which
+would be labour-intensive to reproduce/maintain ourselves, such as
+cryptographic or mathematical/statistics libraries, only crates which
+have stabilised to 1.0.0 should be considered, however, again, we may
+make exceptions on a case-by-case basis.
+
+Currently, Tor requires that you use the latest stable Rust version. At
+some point in the future, we will freeze on a given stable Rust version,
+to ensure backward compatibility with stable distributions that ship it.
+
+ Updating/Adding Dependencies
+------------------------------
+
+To add/remove/update dependencies, first add your dependencies,
+exactly specifying their versions, into the appropriate *crate-level*
+`Cargo.toml` in `src/rust/` (i.e. *not* `/src/rust/Cargo.toml`, but
+instead the one for your crate).  Also, investigate whether your
+dependency has any optional dependencies which are unnecessary but are
+enabled by default.  If so, you'll likely be able to enable/disable
+them via some feature, e.g.:
+
+```toml
+[dependencies]
+foo = { version = "1.0.0", default-features = false }
+```
+
+Next, run `/scripts/maint/updateRustDependencies.sh`.  Then, go into
+`src/ext/rust` and commit the changes to the `tor-rust-dependencies`
+repo.
+
+ Documentation
+---------------
+
+You MUST include `#[deny(missing_docs)]` in your crate.
+
+For function/method comments, you SHOULD include a one-sentence, "first person"
+description of function behaviour (see requirements for documentation as
+described in `.../src/HACKING/CodingStandards.md`), then an `# Inputs` section
+for inputs or initialisation values, a `# Returns` section for return
+values/types, a `# Warning` section containing warnings for unsafe behaviours or
+panics that could happen.  For publicly accessible
+types/constants/objects/functions/methods, you SHOULD also include an
+`# Examples` section with runnable doctests.
+
+You MUST document your module with _module docstring_ comments,
+i.e. `//!` at the beginning of each line.
+
+ Style
+-------
+
+You SHOULD consider breaking up large literal numbers with `_` when it makes it
+more human readable to do so, e.g. `let x: u64 = 100_000_000_000`.
+
+ Testing
+---------
+
+All code MUST be unittested and integration tested.
+
+Public functions/objects exported from a crate SHOULD include doctests
+describing how the function/object is expected to be used.
+
+Integration tests SHOULD go into a `tests/` directory inside your
+crate.  Unittests SHOULD go into their own module inside the module
+they are testing, e.g. in `.../src/rust/tor_addition/addition.rs` you
+should put:
+
+    #[cfg(test)]
+    mod test {
+        use super::*;
+
+        #[test]
+        fn addition_with_zero() {
+            let sum: i32 = get_sum(5i32, 0i32);
+            assert_eq!(sum, 5);
+        }
+    }
+
+ Benchmarking
+--------------
+
+The external `test` crate can be used for most benchmarking.  However, using
+this crate requires nightly Rust.  Since we may want to switch to a more
+stable Rust compiler eventually, we shouldn't do things which will automatically
+break builds for stable compilers.  Therefore, you MUST feature-gate your
+benchmarks in the following manner.
+
+If you wish to benchmark some of your Rust code, you MUST put the
+following in the `[features]` section of your crate's `Cargo.toml`:
+
+    [features]
+    bench = []
+
+Next, in your crate's `lib.rs` you MUST put:
+
+    #[cfg(all(test, feature = "bench"))]
+    extern crate test;
+
+This ensures that the external crate `test`, which contains utilities
+for basic benchmarks, is only used when running benchmarks via `cargo
+bench --features bench`.
+
+Finally, to write your benchmark code, in
+`.../src/rust/tor_addition/addition.rs` you SHOULD put:
+
+    #[cfg(all(test, features = "bench"))]
+    mod bench {
+        use test::Bencher;
+        use super::*;
+
+        #[bench]
+        fn addition_small_integers(b: &mut Bencher) {
+            b.iter(| | get_sum(5i32, 0i32));
+        }
+    }
+
+ Fuzzing
+---------
+
+If you wish to fuzz parts of your code, please see the
+[`cargo fuzz`](https://github.com/rust-fuzz/cargo-fuzz) crate, which uses
+[libfuzzer-sys](https://github.com/rust-fuzz/libfuzzer-sys).
+
+ Whitespace & Formatting
+-------------------------
+
+You MUST run `rustfmt` (https://github.com/rust-lang-nursery/rustfmt)
+on your code before your code will be merged.  You can install rustfmt
+by doing `cargo install rustfmt-nightly` and then run it with `cargo
+fmt`.
+
+ Safety
+--------
+
+You SHOULD read [the nomicon](https://doc.rust-lang.org/nomicon/) before writing
+Rust FFI code.  It is *highly advised* that you read and write normal Rust code
+before attempting to write FFI or any other unsafe code.
+
+Here are some additional bits of advice and rules:
+
+0. Any behaviours which Rust considers to be undefined are forbidden
+
+   From https://doc.rust-lang.org/reference/behavior-considered-undefined.html:
+
+   > Behavior considered undefined
+   >
+   > The following is a list of behavior which is forbidden in all Rust code,
+   > including within unsafe blocks and unsafe functions. Type checking provides the
+   > guarantee that these issues are never caused by safe code.
+   > 
+   > * Data races
+   > * Dereferencing a null/dangling raw pointer
+   > * Reads of [undef](http://llvm.org/docs/LangRef.html#undefined-values)
+   >   (uninitialized) memory
+   > * Breaking the
+   >   [pointer aliasing rules](http://llvm.org/docs/LangRef.html#pointer-aliasing-rules)
+   >   with raw pointers (a subset of the rules used by C)
+   > * `&mut T` and `&T` follow LLVM’s scoped noalias model, except if the `&T`
+   >   contains an `UnsafeCell<U>`. Unsafe code must not violate these aliasing
+   >   guarantees.
+   > * Mutating non-mutable data (that is, data reached through a shared
+   >   reference or data owned by a `let` binding), unless that data is
+   >   contained within an `UnsafeCell<U>`.
+   > * Invoking undefined behavior via compiler intrinsics:
+   >     - Indexing outside of the bounds of an object with
+   >       `std::ptr::offset` (`offset` intrinsic), with the exception of
+   >       one byte past the end which is permitted.
+   >     - Using `std::ptr::copy_nonoverlapping_memory` (`memcpy32`/`memcpy64`
+   >       intrinsics) on overlapping buffers
+   > * Invalid values in primitive types, even in private fields/locals:
+   >     - Dangling/null references or boxes
+   >     - A value other than `false` (0) or `true` (1) in a `bool`
+   >     - A discriminant in an `enum` not included in the type definition
+   >     - A value in a `char` which is a surrogate or above `char::MAX`
+   >     - Non-UTF-8 byte sequences in a `str`
+   > * Unwinding into Rust from foreign code or unwinding from Rust into foreign
+   >   code. Rust's failure system is not compatible with exception handling in other
+   >   languages. Unwinding must be caught and handled at FFI boundaries.
+
+1. `unwrap()`
+
+   If you call `unwrap()`, anywhere, even in a test, you MUST include
+   an inline comment stating how the unwrap will either 1) never fail,
+   or 2) should fail (i.e. in a unittest).
+
+   You SHOULD NOT use `unwrap()` anywhere in which it is possible to handle the
+   potential error with either `expect()` or the eel operator, `?`.
+   For example, consider a function which parses a string into an integer:
+
+        fn parse_port_number(config_string: &str) -> u16 {
+            u16::from_str_radix(config_string, 10).unwrap()
+        }
+
+   There are numerous ways this can fail, and the `unwrap()` will cause the
+   whole program to byte the dust!  Instead, either you SHOULD use `expect()`
+   (or another equivalent function which will return an `Option` or a `Result`)
+   and change the return type to be compatible:
+
+        fn parse_port_number(config_string: &str) -> Option<u16> {
+            u16::from_str_radix(config_string, 10).expect("Couldn't parse port into a u16")
+        }
+
+   or you SHOULD use `or()` (or another similar method):
+
+        fn parse_port_number(config_string: &str) -> Option<u16> {
+            u16::from_str_radix(config_string, 10).or(Err("Couldn't parse port into a u16")
+        }
+
+   Using methods like `or()` can be particularly handy when you must do
+   something afterwards with the data, for example, if we wanted to guarantee
+   that the port is high.  Combining these methods with the eel operator (`?`)
+   makes this even easier:
+
+        fn parse_port_number(config_string: &str) -> Result<u16, Err> {
+            let port = u16::from_str_radix(config_string, 10).or(Err("Couldn't parse port into a u16"))?;
+
+            if port > 1024 {
+                return Ok(port);
+            } else {
+                return Err("Low ports not allowed");
+            }
+        }
+
+2. `unsafe`
+
+   If you use `unsafe`, you MUST describe a contract in your
+   documentation which describes how and when the unsafe code may
+   fail, and what expectations are made w.r.t. the interfaces to
+   unsafe code.  This is also REQUIRED for major pieces of FFI between
+   C and Rust.
+
+   When creating an FFI in Rust for C code to call, it is NOT REQUIRED
+   to declare the entire function `unsafe`.  For example, rather than doing:
+
+        #[no_mangle]
+        pub unsafe extern "C" fn increment_and_combine_numbers(mut numbers: [u8; 4]) -> u32 {
+            for number in &mut numbers {
+                *number += 1;
+            }
+            std::mem::transmute::<[u8; 4], u32>(numbers)
+        }
+
+   You SHOULD instead do:
+
+        #[no_mangle]
+        pub extern "C" fn increment_and_combine_numbers(mut numbers: [u8; 4]) -> u32 {
+            for index in 0..numbers.len() {
+                numbers[index] += 1;
+            }
+            unsafe {
+                std::mem::transmute::<[u8; 4], u32>(numbers)
+            }
+        }
+
+3. Pass only C-compatible primitive types and bytes over the boundary
+
+   Rust's C-compatible primitive types are integers and floats.
+   These types are declared in the [libc crate](https://doc.rust-lang.org/libc/x86_64-unknown-linux-gnu/libc/index.html#types).
+   Most Rust objects have different [representations](https://doc.rust-lang.org/libc/x86_64-unknown-linux-gnu/libc/index.html#types)
+   in C and Rust, so they can't be passed using FFI.
+
+   Tor currently uses the following Rust primitive types from libc for FFI:
+   * defined-size integers: `uint32_t`
+   * native-sized integers: `c_int`
+   * native-sized floats: `c_double`
+   * native-sized raw pointers: `* c_void`, `* c_char`, `** c_char`
+
+   TODO: C smartlist to Stringlist conversion using FFI
+
+   The only non-primitive type which may cross the FFI boundary is
+   bytes, e.g. `&[u8]`.  This SHOULD be done on the Rust side by
+   passing a pointer (`*mut libc::c_char`). The length can be passed
+   explicitly (`libc::size_t`), or the string can be NUL-byte terminated
+   C string.
+
+   One might be tempted to do this via doing
+   `CString::new("blah").unwrap().into_raw()`. This has several problems:
+
+   a) If you do `CString::new("bl\x00ah")` then the unwrap() will fail
+      due to the additional NULL terminator, causing a dangling
+      pointer to be returned (as well as a potential use-after-free).
+
+   b) Returning the raw pointer will cause the CString to run its deallocator,
+      which causes any C code which tries to access the contents to dereference a
+      NULL pointer.
+
+   c) If we were to do `as_raw()` this would result in a potential double-free
+      since the Rust deallocator would run and possibly Tor's deallocator.
+
+   d) Calling `into_raw()` without later using the same pointer in Rust to call
+      `from_raw()` and then deallocate in Rust can result in a
+      [memory leak](https://doc.rust-lang.org/std/ffi/struct.CString.html#method.into_raw).
+
+      [It was determined](https://github.com/rust-lang/rust/pull/41074) that this
+      is safe to do if you use the same allocator in C and Rust and also specify
+      the memory alignment for CString (except that there is no way to specify
+      the alignment for CString).  It is believed that the alignment is always 1,
+      which would mean it's safe to dealloc the resulting `*mut c_char` in Tor's
+      C code.  However, the Rust developers are not willing to guarantee the
+      stability of, or a contract for, this behaviour, citing concerns that this
+      is potentially extremely and subtly unsafe.
+
+4. Perform an allocation on the other side of the boundary
+
+   After crossing the boundary, the other side MUST perform an
+   allocation to copy the data and is therefore responsible for
+   freeing that memory later.
+
+5. No touching other language's enums
+
+   Rust enums should never be touched from C (nor can they be safely
+   `#[repr(C)]`) nor vice versa:
+
+   >  "The chosen size is the default enum size for the target platform's C
+   >  ABI. Note that enum representation in C is implementation defined, so this is
+   >  really a "best guess". In particular, this may be incorrect when the C code
+   >  of interest is compiled with certain flags."
+
+   (from https://gankro.github.io/nomicon/other-reprs.html)
+
+6. Type safety
+
+   Wherever possible and sensical, you SHOULD create new types in a
+   manner which prevents type confusion or misuse.  For example,
+   rather than using an untyped mapping between strings and integers
+   like so:
+
+        use std::collections::HashMap;
+
+        pub fn get_elements_with_over_9000_points(map: &HashMap<String, usize>) -> Vec<String> {
+            ...
+        }
+
+   It would be safer to define a new type, such that some other usage
+   of `HashMap<String, usize>` cannot be confused for this type:
+
+        pub struct DragonBallZPowers(pub HashMap<String, usize>);
+
+        impl DragonBallZPowers {
+            pub fn over_nine_thousand<'a>(&'a self) -> Vec<&'a String> {
+                let mut powerful_enough: Vec<&'a String> = Vec::with_capacity(5);
+
+                for (character, power) in &self.0 {
+                    if *power > 9000 {
+                        powerful_enough.push(character);
+                    }
+                }
+                powerful_enough
+            }
+        }
+
+   Note the following code, which uses Rust's type aliasing, is valid
+   but it does NOT meet the desired type safety goals:
+
+        pub type Power = usize;
+
+        pub fn over_nine_thousand(power: &Power) -> bool {
+            if *power > 9000 {
+                return true;
+            }
+            false
+        }
+
+        // We can still do the following:
+        let his_power: usize = 9001;
+        over_nine_thousand(&his_power);
+
+7. Unsafe mucking around with lifetimes
+
+   Because lifetimes are technically, in type theory terms, a kind, i.e. a
+   family of types, individual lifetimes can be treated as types.  For example,
+   one can arbitrarily extend and shorten lifetime using `std::mem::transmute`:
+
+        struct R<'a>(&'a i32);
+
+        unsafe fn extend_lifetime<'b>(r: R<'b>) -> R<'static> {
+            std::mem::transmute::<R<'b>, R<'static>>(r)
+        }
+
+        unsafe fn shorten_invariant_lifetime<'b, 'c>(r: &'b mut R<'static>) -> &'b mut R<'c> {
+            std::mem::transmute::<&'b mut R<'static>, &'b mut R<'c>>(r)
+        }
+
+   Calling `extend_lifetime()` would cause an `R` passed into it to live forever
+   for the life of the program (the `'static` lifetime).  Similarly,
+   `shorten_invariant_lifetime()` could be used to take something meant to live
+   forever, and cause it to disappear!  This is incredibly unsafe.  If you're
+   going to be mucking around with lifetimes like this, first, you better have
+   an extremely good reason, and second, you may as be honest and explicit about
+   it, and for ferris' sake just use a raw pointer.
+
+   In short, just because lifetimes can be treated like types doesn't mean you
+   should do it.
+
+8. Doing excessively unsafe things when there's a safer alternative
+
+   Similarly to #7, often there are excessively unsafe ways to do a task and a
+   simpler, safer way.  You MUST choose the safer option where possible.
+
+   For example, `std::mem::transmute` can be abused in ways where casting with
+   `as` would be both simpler and safer:
+
+        // Don't do this
+        let ptr = &0;
+        let ptr_num_transmute = unsafe { std::mem::transmute::<&i32, usize>(ptr)};
+
+        // Use an `as` cast instead
+        let ptr_num_cast = ptr as *const i32 as usize;
+
+   In fact, using `std::mem::transmute` for *any* reason is a code smell and as
+   such SHOULD be avoided.
+
+9. Casting integers with `as`
+
+   This is generally fine to do, but it has some behaviours which you should be
+   aware of.  Casting down chops off the high bits, e.g.:
+
+        let x: u32 = 4294967295;
+        println!("{}", x as u16); // prints 65535
+
+   Some cases which you MUST NOT do include:
+
+   * Casting an `u128` down to an `f32` or vice versa (e.g.
+     `u128::MAX as f32` but this isn't only a problem with overflowing
+     as it is also undefined behaviour for `42.0f32 as u128`),
+
+   * Casting between integers and floats when the thing being cast
+     cannot fit into the type it is being casted into, e.g.:
+
+         println!("{}", 42949.0f32 as u8); // prints 197 in debug mode and 0 in release
+         println!("{}", 1.04E+17 as u8);   // prints 0 in both modes
+         println!("{}", (0.0/0.0) as i64); // prints whatever the heck LLVM wants
+
+     Because this behaviour is undefined, it can even produce segfaults in
+     safe Rust code.  For example, the following program built in release
+     mode segfaults:
+
+         #[inline(never)]
+         pub fn trigger_ub(sl: &[u8; 666]) -> &[u8] {
+             // Note that the float is out of the range of `usize`, invoking UB when casting.
+             let idx = 1e99999f64 as usize;
+             &sl[idx..] // The bound check is elided due to `idx` being of an undefined value.
+         }
+
+         fn main() {
+             println!("{}", trigger_ub(&[1; 666])[999999]); // ~ out of bound
+         }
+
+      And in debug mode panics with:
+
+         thread 'main' panicked at 'slice index starts at 140721821254240 but ends at 666', /checkout/src/libcore/slice/mod.rs:754:4
diff -pruN 0.3.3.9-1/doc/HACKING/Fuzzing.md 0.3.4.8-1/doc/HACKING/Fuzzing.md
--- 0.3.3.9-1/doc/HACKING/Fuzzing.md	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/Fuzzing.md	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,123 @@
+= Fuzzing Tor
+
+== The simple version (no fuzzing, only tests)
+
+Check out fuzzing-corpora, and set TOR_FUZZ_CORPORA to point to the place
+where you checked it out.
+
+To run the fuzzing test cases in a deterministic fashion, use:
+      make test-fuzz-corpora
+
+This won't actually fuzz Tor!  It will just run all the fuzz binaries
+on our existing set of testcases for the fuzzer.
+
+
+== Different kinds of fuzzing
+
+Right now we support three different kinds of fuzzer.
+
+First, there's American Fuzzy Lop (AFL), a fuzzer that works by forking
+a target binary and passing it lots of different inputs on stdin.  It's the
+trickiest one to set up, so I'll be describing it more below.
+
+Second, there's libFuzzer, a llvm-based fuzzer that you link in as a library,
+and it runs a target function over and over.  To use this one, you'll need to
+have a reasonably recent clang and libfuzzer installed.  At that point, you
+just build with --enable-expensive-hardening and --enable-libfuzzer.  That
+will produce a set of binaries in src/test/fuzz/lf-fuzz-* .  These programs
+take as input a series of directories full of fuzzing examples.  For more
+information on libfuzzer, see http://llvm.org/docs/LibFuzzer.html
+
+Third, there's Google's OSS-Fuzz infrastructure, which expects to get all of
+its.  For more on this, see https://github.com/google/oss-fuzz and the
+projects/tor subdirectory.  You'll need to mess around with Docker a bit to
+test this one out; it's meant to run on Google's infrastructure.
+
+In all cases, you'll need some starting examples to give the fuzzer when it
+starts out.  There's a set in the "fuzzing-corpora" git repository.  Try
+setting TOR_FUZZ_CORPORA to point to a checkout of that repository
+
+== Writing Tor fuzzers
+
+A tor fuzzing harness should have:
+* a fuzz_init() function to set up any necessary global state.
+* a fuzz_main() function to receive input and pass it to a parser.
+* a fuzz_cleanup() function to clear global state.
+
+Most fuzzing frameworks will produce many invalid inputs - a tor fuzzing
+harness should rejecting invalid inputs without crashing or behaving badly.
+
+But the fuzzing harness should crash if tor fails an assertion, triggers a
+bug, or accesses memory it shouldn't. This helps fuzzing frameworks detect
+"interesting" cases.
+
+
+== Guided Fuzzing with AFL
+
+There is no HTTPS, hash, or signature for American Fuzzy Lop's source code, so
+its integrity can't be verified. That said, you really shouldn't fuzz on a
+machine you care about, anyway.
+
+To Build:
+  Get AFL from http://lcamtuf.coredump.cx/afl/ and unpack it
+  cd afl
+  make
+  cd ../tor
+  PATH=$PATH:../afl/ CC="../afl/afl-gcc" ./configure --enable-expensive-hardening
+  AFL_HARDEN=1 make clean fuzzers
+
+To Find The ASAN Memory Limit: (64-bit only)
+
+On 64-bit platforms, afl needs to know how much memory ASAN uses,
+because ASAN tends to allocate a ridiculous amount of virtual memory,
+and then not actually use it.
+
+Read afl/docs/notes_for_asan.txt for more details.
+
+  Download recidivm from http://jwilk.net/software/recidivm
+  Download the signature
+  Check the signature
+  tar xvzf recidivm*.tar.gz
+  cd recidivm*
+  make
+  /path/to/recidivm -v src/test/fuzz/fuzz-http
+  Use the final "ok" figure as the input to -m when calling afl-fuzz
+  (Normally, recidivm would output a figure automatically, but in some cases,
+  the fuzzing harness will hang when the memory limit is too small.)
+
+You could also just say "none" instead of the memory limit below, if you
+don't care about memory limits.
+
+
+To Run:
+  mkdir -p src/test/fuzz/fuzz_http_findings
+  ../afl/afl-fuzz -i ${TOR_FUZZ_CORPORA}/http -o src/test/fuzz/fuzz_http_findings -m <asan-memory-limit> -- src/test/fuzz/fuzz-http
+
+
+AFL has a multi-core mode, check the documentation for details.
+You might find the included fuzz-multi.sh script useful for this.
+
+macOS (OS X) requires slightly more preparation, including:
+* using afl-clang (or afl-clang-fast from the llvm directory)
+* disabling external crash reporting (AFL will guide you through this step)
+
+== Triaging Issues
+
+Crashes are usually interesting, particularly if using AFL_HARDEN=1 and --enable-expensive-hardening. Sometimes crashes are due to bugs in the harness code.
+
+Hangs might be interesting, but they might also be spurious machine slowdowns.
+Check if a hang is reproducible before reporting it. Sometimes, processing
+valid inputs may take a second or so, particularly with the fuzzer and
+sanitizers enabled.
+
+To see what fuzz-http is doing with a test case, call it like this:
+  src/test/fuzz/fuzz-http --debug < /path/to/test.case
+
+(Logging is disabled while fuzzing to increase fuzzing speed.)
+
+== Reporting Issues
+
+Please report any issues discovered using the process in Tor's security issue
+policy:
+
+https://trac.torproject.org/projects/tor/wiki/org/meetings/2016SummerDevMeeting/Notes/SecurityIssuePolicy
diff -pruN 0.3.3.9-1/doc/HACKING/GettingStartedRust.md 0.3.4.8-1/doc/HACKING/GettingStartedRust.md
--- 0.3.3.9-1/doc/HACKING/GettingStartedRust.md	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/GettingStartedRust.md	2018-08-16 12:35:31.000000000 +0000
@@ -0,0 +1,183 @@
+
+ Hacking on Rust in Tor
+========================
+
+ Getting Started
+-----------------
+
+Please read or review our documentation on Rust coding standards
+(`.../doc/HACKING/CodingStandardsRust.md`) before doing anything.
+
+Please also read
+[the Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html). We
+aim to follow the good example set by the Rust community and be
+excellent to one another.  Let's be careful with each other, so we can
+be memory-safe together!
+
+Next, please contact us before rewriting anything!  Rust in Tor is still
+an experiment.  It is an experiment that we very much want to see
+succeed, so we're going slowly and carefully.  For the moment, it's also
+a completely volunteer-driven effort: while many, if not most, of us are
+paid to work on Tor, we are not yet funded to write Rust code for Tor.
+Please be patient with the other people who are working on getting more
+Rust code into Tor, because they are graciously donating their free time
+to contribute to this effort.
+
+ Resources for learning Rust
+-----------------------------
+
+**Beginning resources**
+
+The primary resource for learning Rust is
+[The Book](https://doc.rust-lang.org/book/).  If you'd like to start writing
+Rust immediately, without waiting for anything to install, there is
+[an interactive browser-based playground](https://play.rust-lang.org/).
+
+**Advanced resources**
+
+If you're interested in playing with various Rust compilers and viewing
+a very nicely displayed output of the generated assembly, there is
+[the Godbolt compiler explorer](https://rust.godbolt.org/)
+
+For learning how to write unsafe Rust, read
+[The Rustonomicon](https://doc.rust-lang.org/nomicon/).
+
+For learning everything you ever wanted to know about Rust macros, there
+is
+[The Little Book of Rust Macros](https://danielkeep.github.io/tlborm/book/index.html).
+
+For learning more about FFI and Rust, see Jake Goulding's
+[Rust FFI Omnibus](http://jakegoulding.com/rust-ffi-omnibus/).
+
+ Compiling Tor with Rust enabled
+---------------------------------
+
+You will need to run the `configure` script with the `--enable-rust`
+flag to explicitly build with Rust. Additionally, you will need to
+specify where to fetch Rust dependencies, as we allow for either
+fetching dependencies from Cargo or specifying a local directory.
+
+**Fetch dependencies from Cargo**
+
+    ./configure --enable-rust --enable-cargo-online-mode
+
+**Using a local dependency cache**
+
+You'll need the following Rust dependencies (as of this writing):
+
+    libc==0.2.39
+
+We vendor our Rust dependencies in a separate repo using
+[cargo-vendor](https://github.com/alexcrichton/cargo-vendor).  To use
+them, do:
+
+    git submodule init
+    git submodule update
+
+To specify the local directory containing the dependencies, (assuming
+you are in the top level of the repository) configure tor with:
+
+    TOR_RUST_DEPENDENCIES='path_to_dependencies_directory' ./configure --enable-rust
+
+(Note that TOR_RUST_DEPENDENCIES must be the full path to the directory; it
+cannot be relative.)
+
+Assuming you used the above `git submodule` commands and you're in the
+topmost directory of the repository, this would be:
+
+    TOR_RUST_DEPENDENCIES=`pwd`/src/ext/rust/crates ./configure --enable-rust
+
+
+ Identifying which modules to rewrite
+======================================
+
+The places in the Tor codebase that are good candidates for porting to
+Rust are:
+
+1. loosely coupled to other Tor submodules,
+2. have high test coverage, and
+3. would benefit from being implemented in a memory safe language.
+
+Help in either identifying places such as this, or working to improve
+existing areas of the C codebase by adding regression tests and
+simplifying dependencies, would be really helpful.
+
+Furthermore, as submodules in C are implemented in Rust, this is a good
+opportunity to refactor, add more tests, and split modules into smaller
+areas of responsibility.
+
+A good first step is to build a module-level callgraph to understand how
+interconnected your target module is.
+
+    git clone https://git.torproject.org/user/nickm/calltool.git
+    cd tor
+    CFLAGS=0 ./configure
+    ../calltool/src/main.py module_callgraph
+
+The output will tell you each module name, along with a set of every module that
+the module calls.  Modules which call fewer other modules are better targets.
+
+ Writing your Rust module
+==========================
+
+Strive to change the C API as little as possible.
+
+We are currently targetting Rust stable. (See CodingStandardsRust.md for more
+details.)
+
+It is on our TODO list to try to cultivate good
+standing with various distro maintainers of `rustc` and `cargo`, in
+order to ensure that whatever version we solidify on is readily
+available.
+
+If parts of your Rust code needs to stay in sync with C code (such as
+handling enums across the FFI boundary), annonotate these places in a
+comment structured as follows:
+
+  /// C_RUST_COUPLED: <path_to_file> `<name_of_c_object>`
+
+Where <name_of_c_object> can be an enum, struct, constant, etc.  Then,
+do the same in the C code, to note that rust will need to be changed
+when the C does.
+
+
+ Adding your Rust module to Tor's build system
+-----------------------------------------------
+
+0. Your translation of the C module should live in its own crate(s)
+   in the `.../tor/src/rust/` directory.
+1. Add your crate to `.../tor/src/rust/Cargo.toml`, in the
+   `[workspace.members]` section.
+2. Add your crate's files to src/rust/include.am
+
+If your crate should be available to C (rather than just being included as a
+dependency of other Rust modules):
+0. Declare the crate as a dependency of tor_rust in
+   `src/rust/tor_util/Cargo.toml` and include it in
+   `src/rust/tor_rust/lib.rs`
+
+ How to test your Rust code
+----------------------------
+
+Everything should be tested full stop.  Even non-public functionality.
+
+Be sure to edit `.../tor/src/test/test_rust.sh` to add the name of your
+crate to the `crates` variable! This will ensure that `cargo test` is
+run on your crate.
+
+Configure Tor's build system to build with Rust enabled:
+
+    ./configure --enable-fatal-warnings --enable-rust --enable-cargo-online-mode
+
+Tor's test should be run by doing:
+
+    make check
+
+Tor's integration tests should also pass:
+
+    make test-stem
+
+ Submitting a patch
+=====================
+
+Please follow the instructions in `.../doc/HACKING/GettingStarted.md`.
diff -pruN 0.3.3.9-1/doc/HACKING/HelpfulTools.md 0.3.4.8-1/doc/HACKING/HelpfulTools.md
--- 0.3.3.9-1/doc/HACKING/HelpfulTools.md	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/HelpfulTools.md	2018-06-15 21:20:53.000000000 +0000
@@ -4,6 +4,22 @@ Useful tools
 These aren't strictly necessary for hacking on Tor, but they can help track
 down bugs.
 
+Travis CI
+---------
+It's CI. Looks like this: https://travis-ci.org/torproject/tor.
+
+Runs automatically on Pull Requests sent to torproject/tor. You can set it up
+for your fork to build commits outside of PRs too:
+
+1. sign up for GitHub: https://github.com/join
+2. fork https://github.com/torproject/tor:
+   https://help.github.com/articles/fork-a-repo/
+3. follow https://docs.travis-ci.com/user/getting-started/#To-get-started-with-Travis-CI.
+   skip steps involving `.travis.yml` (we already have one).
+
+Builds should show up on the web at travis-ci.com and on IRC at #tor-ci on
+OFTC. If they don't, ask #tor-dev (also on OFTC).
+
 Jenkins
 -------
 
diff -pruN 0.3.3.9-1/doc/HACKING/Module.md 0.3.4.8-1/doc/HACKING/Module.md
--- 0.3.3.9-1/doc/HACKING/Module.md	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/Module.md	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,111 @@
+# Modules in Tor #
+
+This document describes the build system and coding standards when writing a
+module in Tor.
+
+## What is a module? ##
+
+In the context of the tor code base, a module is a subsystem that we can
+selectively enable or disable, at `configure` time.
+
+Currently, there is only one module:
+
+  - Directory Authority subsystem (dirauth)
+
+It is located in its own directory in `src/or/dirauth/`. To disable it, one
+need to pass `--disable-module-dirauth` at configure time. All modules are
+currently enabled by default.
+
+## Build System ##
+
+The changes to the build system are pretty straightforward.
+
+1. Locate in the `configure.ac` file this define: `m4_define(MODULES`. It
+   contains a list (white-space separated) of the module in tor. Add yours to
+   the list.
+
+2. Use the `AC_ARG_ENABLE([module-dirauth]` template for your new module. We
+   use the "disable module" approach instead of enabling them one by one. So,
+   by default, tor will build all the modules.
+
+   This will define the `HAVE_MODULE_<name>` statement which can be used in
+   the C code to conditionally compile things for your module. And the
+   `BUILD_MODULE_<name>` is also defined for automake files (e.g: include.am).
+
+3. In the `src/or/include.am` file, locate the `MODULE_DIRAUTH_SOURCES` value.
+   You need to create your own `_SOURCES` variable for your module and then
+   conditionally add the it to `LIBTOR_A_SOURCES` if you should build the
+   module.
+
+   It is then **very** important to add your SOURCES variable to
+   `src_or_libtor_testing_a_SOURCES` so the tests can build it.
+
+4. Do the same for header files, locate `ORHEADERS +=` which always add all
+   headers of all modules so the symbol can be found for the module entry
+   points.
+
+Finally, your module will automatically be included in the
+`TOR_MODULES_ALL_ENABLED` variable which is used to build the unit tests. They
+always build everything in order to tests everything.
+
+## Coding ##
+
+As mentioned above, a module must be isolated in its own directory (name of
+the module) in `src/or/`.
+
+There are couples of "rules" you want to follow:
+
+* Minimize as much as you can the number of entry points into your module.
+  Less is always better but of course that doesn't work out for every use
+  case. However, it is a good thing to always keep that in mind.
+
+* Do **not** use the `HAVE_MODULE_<name>` define outside of the module code
+  base. Every entry point should have a second definition if the module is
+  disabled. For instance:
+
+  ```
+  #ifdef HAVE_MODULE_DIRAUTH
+
+  int sr_init(int save_to_disk);
+
+  #else /* HAVE_MODULE_DIRAUTH */
+
+  static inline int
+  sr_init(int save_to_disk)
+  {
+    (void) save_to_disk;
+    return 0;
+  }
+
+  #endif /* HAVE_MODULE_DIRAUTH */
+
+  ```
+
+  The main reason for this approach is to avoid having conditional code
+  everywhere in the code base. It should be centralized as much as possible
+  which helps maintainability but also avoids conditional spaghetti code
+  making the code much more difficult to follow/understand.
+
+* It is possible that you end up with code that needs to be used by the rest
+  of the code base but is still part of your module. As a good example, if you
+  look at `src/or/shared_random_client.c`: it contains code needed by the hidden
+  service subsystem but mainly related to the shared random subsystem very
+  specific to the dirauth module.
+
+  This is fine but try to keep it as lean as possible and never use the same
+  filename as the one in the module. For example, this is a bad idea and
+  should never be done:
+
+    - `src/or/shared_random.c`
+    - `src/or/dirauth/shared_random.c`
+
+* When you include headers from the module, **always** use the full module
+  path in your statement. Example:
+
+  `#include "dirauth/dirvote.h"`
+
+  The main reason is that we do **not** add the module include path by default
+  so it needs to be specified. But also, it helps our human brain understand
+  which part comes from a module or not.
+
+  Even **in** the module itself, use the full include path like above.
diff -pruN 0.3.3.9-1/doc/HACKING/ReleasingTor.md 0.3.4.8-1/doc/HACKING/ReleasingTor.md
--- 0.3.3.9-1/doc/HACKING/ReleasingTor.md	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/ReleasingTor.md	2018-06-15 21:20:53.000000000 +0000
@@ -34,7 +34,7 @@ new Tor release:
 
    What about Coverity Scan?
 
-   What about clan scan-build?
+   What about clang scan-build?
 
    Does 'make distcheck' complain?
 
diff -pruN 0.3.3.9-1/doc/HACKING/Tracing.md 0.3.4.8-1/doc/HACKING/Tracing.md
--- 0.3.3.9-1/doc/HACKING/Tracing.md	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/doc/HACKING/Tracing.md	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,91 @@
+# Tracing #
+
+This document describes how the event tracing subsystem works in tor so
+developers can add events to the code base but also hook them to an event
+tracing framework.
+
+## Basics ###
+
+Event tracing is separated in two concepts, trace events and a tracer. The
+tracing subsystem can be found in `src/trace`. The `events.h` header file is
+the main file that maps the different tracers to trace events.
+
+### Events ###
+
+A trace event is basically a function from which we can pass any data that
+we want to collect. In addition, we specify a context for the event such as
+a subsystem and an event name.
+
+A trace event in tor has the following standard format:
+
+	tor_trace(subsystem, event\_name, args...)
+
+The `subsystem` parameter is the name of the subsytem the trace event is in.
+For example that could be "scheduler" or "vote" or "hs". The idea is to add
+some context to the event so when we collect them we know where it's coming
+from. The `event_name` is the name of the event which helps a lot with
+adding some semantic to the event. Finally, `args` is any number of
+arguments we want to collect.
+
+Here is an example of a possible tracepoint in main():
+
+	tor_trace(main, init_phase, argc)
+
+The above is a tracepoint in the `main` subsystem with `init_phase` as the
+event name and the `int argc` is passed to the event as well.
+
+How `argc` is collected or used has nothing to do with the instrumentation
+(adding trace events to the code). It is the work of the tracer so this is why
+the trace events and collection framework (tracer) are decoupled. You _can_
+have trace events without a tracer.
+
+### Tracer ###
+
+In `src/trace/events.h`, we map the `tor_trace()` function to the right
+tracer. A tracer support is only enabled at compile time. For instance, the
+file `src/trace/debug.h` contains the mapping of the generic tracing function
+`tor_trace()` to the `log_debug()` function. More specialized function can be
+mapped depending on the tracepoint.
+
+## Build System ##
+
+This section describes how it is integrated into the build system of tor.
+
+By default, every tracing events are disabled in tor that is `tor_trace()`
+is a NOP.
+
+To enable a tracer, there is a configure option on the form of:
+
+	--enable-tracing-<tracer>
+
+We have an option that will send every trace events to a `log_debug()` (as
+mentionned above) which will print you the subsystem and name of the event but
+not the arguments for technical reasons. This is useful if you want to quickly
+see if your trace event is being hit or well written. To do so, use this
+configure option:
+
+	--enable-tracing-debug
+
+## Instrument Tor ##
+
+This is pretty easy. Let's say you want to add a trace event in
+`src/or/rendcache.c`, you only have to add this include statement:
+
+	#include "trace/events.h"
+
+Once done, you can add as many as you want `tor_trace()` that you need.
+Please use the right subsystem (here it would be `hs`) and a unique name that
+tells what the event is for. For example:
+
+	tor_trace(hs, store_desc_as_client, desc, desc_id);
+
+If you look in `src/trace/events.h`, you'll see that if tracing is enabled it
+will be mapped to a function called:
+
+	tor_trace_hs_store_desc_as_client(desc, desc_id)
+
+And the point of all this is for that function to be defined in a new file
+that you might want to add named `src/trace/hs.{c|h}` which would defined how
+to collect the data for the `tor_trace_hs_store_desc_as_client()` function
+like for instance sending it to a `log_debug()` or do more complex operations
+or use a userspace tracer like LTTng (https://lttng.org).
diff -pruN 0.3.3.9-1/doc/include.am 0.3.4.8-1/doc/include.am
--- 0.3.3.9-1/doc/include.am	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/doc/include.am	2018-06-15 21:20:53.000000000 +0000
@@ -35,10 +35,15 @@ EXTRA_DIST+= doc/asciidoc-helper.sh			\
 	     doc/TUNING						\
 	     doc/HACKING/README.1st.md				\
 	     doc/HACKING/CodingStandards.md 			\
+	     doc/HACKING/CodingStandardsRust.md			\
+	     doc/HACKING/Fuzzing.md				\
 	     doc/HACKING/GettingStarted.md 			\
+	     doc/HACKING/GettingStartedRust.md 			\
 	     doc/HACKING/HelpfulTools.md 			\
 	     doc/HACKING/HowToReview.md  			\
+	     doc/HACKING/Module.md				\
 	     doc/HACKING/ReleasingTor.md                        \
+	     doc/HACKING/Tracing.md				\
 	     doc/HACKING/WritingTests.md
 
 docdir = @docdir@
diff -pruN 0.3.3.9-1/doc/tor.1.in 0.3.4.8-1/doc/tor.1.in
--- 0.3.3.9-1/doc/tor.1.in	2018-07-13 18:26:45.000000000 +0000
+++ 0.3.4.8-1/doc/tor.1.in	2018-06-25 18:12:27.000000000 +0000
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: tor
 .\"    Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\"      Date: 07/13/2018
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\"      Date: 06/25/2018
 .\"    Manual: Tor Manual
 .\"    Source: Tor
 .\"  Language: English
 .\"
-.TH "TOR" "1" "07/13/2018" "Tor" "Tor Manual"
+.TH "TOR" "1" "06/25/2018" "Tor" "Tor Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -39,7 +39,7 @@ Tor is a connection\-oriented anonymizin
 Basically, Tor provides a distributed network of servers or relays ("onion routers")\&. Users bounce their TCP streams \(em web traffic, ftp, ssh, etc\&. \(em around the network, and recipients, observers, and even the relays themselves have difficulty tracking the source of the stream\&.
 .sp
 By default, \fBtor\fR will act as a client only\&. To help the network by providing bandwidth as a relay, change the \fBORPort\fR configuration option \(em see below\&. Please also consult the documentation on the Tor Project\(cqs website\&.
-.SH "COMMAND-LINE OPTIONS"
+.SH "COMMAND\-LINE OPTIONS"
 .PP
 \fB\-h\fR, \fB\-help\fR
 .RS 4
@@ -129,16 +129,19 @@ option, which tells Tor not to log to th
 .RS 4
 Running "tor \-\-keygen" creates a new ed25519 master identity key for a relay, or only a fresh temporary signing key and certificate, if you already have a master key\&. Optionally you can encrypt the master identity key with a passphrase: Tor will ask you for one\&. If you don\(cqt want to encrypt the master key, just don\(cqt enter any passphrase when asked\&.
 
+
 The
 \fB\-\-newpass\fR
 option should be used with \-\-keygen only when you need to add, change, or remove a passphrase on an existing ed25519 master identity key\&. You will be prompted for the old passphase (if any), and the new passphrase (if any)\&.
 
+
 When generating a master key, you will probably want to use
 \fB\-\-DataDirectory\fR
 to control where the keys and certificates will be stored, and
 \fB\-\-SigningKeyLifetime\fR
 to control their lifetimes\&. Their behavior is as documented in the server options section below\&. (You must have write access to the specified DataDirectory\&.)
 
+
 To use the generated files, you must copy them to the DataDirectory/keys directory of your Tor daemon, and make sure that they are owned by the user actually running the Tor daemon on your system\&.
 .RE
 .PP
@@ -155,6 +158,7 @@ specifies which type of key certificate
 \fBpurpose\fR
 is "sign"\&.
 
+
 Running "tor \-\-key\-expiration sign" will attempt to find your signing key certificate and will output, both in the logs as well as to stdout, the signing key certificate\(cqs expiration time in ISO\-8601 format\&. For example, the output sent to stdout will be of the form: "signing\-cert\-expiry: 2017\-07\-25 08:30:15 UTC"
 .RE
 .sp
@@ -180,8 +184,10 @@ A token bucket limits the average incomi
 \fIat the very least\fR
 75 KBytes for a relay (that is, 600 kbits) or 50 KBytes for a bridge (400 kbits) \(em but of course, more is better; we recommend at least 250 KBytes (2 mbits) if possible\&. (Default: 1 GByte)
 
+
 Note that this option, and other bandwidth\-limiting options, apply to TCP data only: They do not count TCP headers or DNS traffic\&.
 
+
 With this option, and in other options that take arguments in bytes, KBytes, and so on, other formats are also supported\&. Notably, "KBytes" can also be written as "kilobytes" or "kb"; "MBytes" can be written as "megabytes" or "MB"; "kbits" can be written as "kilobits"; and so forth\&. Tor also accepts "byte" and "bit" in the singular\&. The prefixes "tera" and "T" are also recognized\&. If no units are given, we default to bytes\&. To avoid confusion, we recommend writing "bytes" or "bits" explicitly, since it\(cqs easy to forget that "B" means bytes, not bits\&.
 .RE
 .PP
@@ -219,6 +225,7 @@ If this option is set manually, or via t
 .RS 4
 In its first form, when set along with a corresponding Bridge line, the Tor client forwards its traffic to a SOCKS\-speaking proxy on "IP:PORT"\&. (IPv4 addresses should written as\-is; IPv6 addresses should be wrapped in square brackets\&.) It\(cqs the duty of that proxy to properly forward the traffic to the bridge\&.
 
+
 In its second form, when set along with a corresponding Bridge line, the Tor client launches the pluggable transport proxy executable in
 \fIpath\-to\-binary\fR
 using
@@ -272,12 +279,13 @@ If this option is set to 0, don\(cqt all
 .RS 4
 The minimum number of file descriptors that must be available to the Tor process before it will start\&. Tor will ask the OS for as many file descriptors as the OS will allow (you can find this by "ulimit \-H \-n")\&. If this number is less than ConnLimit, then Tor will refuse to start\&.
 
+
 You probably don\(cqt need to adjust this\&. It has no effect on Windows since that platform lacks getrlimit()\&. (Default: 1000)
 .RE
 .PP
 \fBDisableNetwork\fR \fB0\fR|\fB1\fR
 .RS 4
-When this option is set, we don\(cqt listen for or accept any connections other than controller connections, and we close (and don\(cqt reattempt) any outbound connections\&. Controllers sometimes use this option to avoid using the network until Tor is fully configured\&. (Default: 0)
+When this option is set, we don\(cqt listen for or accept any connections other than controller connections, and we close (and don\(cqt reattempt) any outbound connections\&. Controllers sometimes use this option to avoid using the network until Tor is fully configured\&. Tor will make still certain network\-related calls (like DNS lookups) as a part of its configuration process, even if DisableNetwork is set\&. (Default: 0)
 .RE
 .PP
 \fBConstrainedSockets\fR \fB0\fR|\fB1\fR
@@ -285,10 +293,13 @@ When this option is set, we don\(cqt lis
 If set, Tor will tell the kernel to attempt to shrink the buffers for all sockets to the size specified in
 \fBConstrainedSockSize\fR\&. This is useful for virtual servers and other environments where system level TCP buffers may be limited\&. If you\(cqre on a virtual server, and you encounter the "Error creating network socket: No buffer space available" message, you are likely experiencing this problem\&.
 
+
 The preferred solution is to have the admin increase the buffer pool for the host itself via /proc/sys/net/ipv4/tcp_mem or equivalent facility; this configuration option is a second\-resort\&.
 
+
 The DirPort option should also not be used if TCP buffers are scarce\&. The cached directory requests consume additional sockets which exacerbates the problem\&.
 
+
 You should
 \fBnot\fR
 enable this feature unless you encounter the "no buffer space available" issue\&. Reducing the TCP buffers affects window size for the TCP stream and will reduce throughput in proportion to round trip time on long paths\&. (Default: 0)
@@ -309,6 +320,7 @@ torspec)\&. Note: unless you also specif
 or
 \fBCookieAuthentication\fR, setting this option will cause Tor to allow any process on the local host to control it\&. (Setting both authentication methods means either method is sufficient to authenticate to Tor\&.) This option is required for many Tor controllers; most use the value of 9051\&. If a unix domain socket is used, you may quote the path using standard C escape sequences\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0)
 
+
 Recognized flags are\&...
 .PP
 \fBGroupWritable\fR
@@ -331,7 +343,7 @@ Unix domain sockets only: Do not insist
 .RS 4
 Like ControlPort, but listens on a Unix domain socket, rather than a TCP socket\&.
 \fI0\fR
-disables ControlSocket (Unix and Unix\-like systems only\&.)
+disables ControlSocket\&. (Unix and Unix\-like systems only\&.) (Default: 0)
 .RE
 .PP
 \fBControlSocketsGroupWritable\fR \fB0\fR|\fB1\fR
@@ -408,12 +420,14 @@ Use Tor\(cqs default hard\-coded Fallbac
 Use a nonstandard authoritative directory server at the provided address and port, with the specified key fingerprint\&. This option can be repeated many times, for multiple authoritative directory servers\&. Flags are separated by spaces, and determine what kind of an authority this directory is\&. By default, an authority is not authoritative for any directory style or version unless an appropriate flag is given\&. Tor will use this authority as a bridge authoritative directory if the "bridge" flag is set\&. If a flag "orport=\fBport\fR" is given, Tor will use the given port when opening encrypted tunnels to the dirserver\&. If a flag "weight=\fBnum\fR" is given, then the directory server is chosen randomly with probability proportional to that weight (default 1\&.0)\&. If a flag "v3ident=\fBfp\fR" is given, the dirserver is a v3 directory authority whose v3 long\-term signing key has the fingerprint
 \fBfp\fR\&. Lastly, if an "ipv6=\fB[\fR\fIipv6address\fR\fB]\fR:\fIorport\fR" flag is present, then the directory authority is listening for IPv6 connections on the indicated IPv6 address and OR Port\&.
 
+
 Tor will contact the authority at
 \fIipv4address\fR
 to download directory documents\&. The provided
 \fIport\fR
 value is a dirport; clients ignore this in favor of the specified "orport=" value\&. If an IPv6 ORPort is supplied, Tor will also download directory documents at the IPv6 ORPort\&.
 
+
 If no
 \fBDirAuthority\fR
 line is given, Tor will use the default directory authorities\&. NOTE: this option is intended for setting up a private Tor network with its own directory authorities\&. If you use it, you will be distinguishable from other users, because you won\(cqt believe the same authorities they do\&.
@@ -553,10 +567,13 @@ As above, but select messages by range o
 \fIand\fR
 by a set of "logging domains"\&. Each logging domain corresponds to an area of functionality inside Tor\&. You can specify any number of severity ranges for a single log statement, each of them prefixed by a comma\-separated list of logging domains\&. You can prefix a domain with ~ to indicate negation, and use * to indicate "all domains"\&. If you specify a severity range without a list of domains, it matches all domains\&.
 
+
 This is an advanced feature which is most useful for debugging one or two of Tor\(cqs subsystems at a time\&.
 
+
 The currently recognized domains are: general, crypto, net, config, fs, protocol, mm, http, app, control, circ, rend, bug, dir, dirserv, or, edge, acct, hist, handshake, heartbeat, channel, sched, guard, consdiff, and dos\&. Domain names are case\-insensitive\&.
 
+
 For example, "Log [handshake]debug [~net,~mm]info notice stdout" sends to stdout: all handshake messages of any severity, all info\-and\-higher messages from domains other than networking and memory management, and all messages of severity notice or higher\&.
 .RE
 .PP
@@ -628,6 +645,7 @@ When logging to Android\(cqs logging sub
 .RS 4
 Tor can scrub potentially sensitive strings from log messages (e\&.g\&. addresses) by replacing them with the string [scrubbed]\&. This way logs can still be useful, but they don\(cqt leave behind personally identifying information about what sites a user might have visited\&.
 
+
 If this option is set to 0, Tor will not perform any scrubbing, if it is set to 1, all potentially sensitive strings are replaced\&. If it is set to relay, all log messages generated when acting as a relay are sanitized, but all messages generated when acting as a client are not\&. (Default: 1)
 .RE
 .PP
@@ -666,9 +684,9 @@ Specify this option if using dynamic har
 If non\-zero, try to write to disk less frequently than we would otherwise\&. This is useful when running on flash memory or other media that support only a limited number of writes\&. (Default: 0)
 .RE
 .PP
-\fBCircuitPriorityHalflife\fR \fINUM1\fR
+\fBCircuitPriorityHalflife\fR \fINUM\fR
 .RS 4
-If this value is set, we override the default algorithm for choosing which circuit\(cqs cell to deliver or relay next\&. When the value is 0, we round\-robin between the active circuits on a connection, delivering one cell from each in turn\&. When the value is positive, we prefer delivering cells from whichever connection has the lowest weighted cell count, where cells are weighted exponentially according to the supplied CircuitPriorityHalflife value (in seconds)\&. If this option is not set at all, we use the behavior recommended in the current consensus networkstatus\&. This is an advanced option; you generally shouldn\(cqt have to mess with it\&. (Default: not set)
+If this value is set, we override the default algorithm for choosing which circuit\(cqs cell to deliver or relay next\&. It is delivered first to the circuit that has the lowest weighted cell count, where cells are weighted exponentially according to this value (in seconds)\&. If the value is \-1, it is taken from the consensus if possible else it will fallback to the default value of 30\&. Minimum: 1, Maximum: 2147483647\&. This can be defined as a float value\&. This is an advanced option; you generally shouldn\(cqt have to mess with it\&. (Default: \-1)
 .RE
 .PP
 \fBCountPrivateBandwidth\fR \fB0\fR|\fB1\fR
@@ -683,7 +701,7 @@ If this option is set to 1, we always tr
 .PP
 \fBNoExec\fR \fB0\fR|\fB1\fR
 .RS 4
-If this option is set to 1, then Tor will never launch another executable, regardless of the settings of PortForwardingHelper, ClientTransportPlugin, or ServerTransportPlugin\&. Once this option has been set to 1, it cannot be set back to 0 without restarting Tor\&. (Default: 0)
+If this option is set to 1, then Tor will never launch another executable, regardless of the settings of ClientTransportPlugin or ServerTransportPlugin\&. Once this option has been set to 1, it cannot be set back to 0 without restarting Tor\&. (Default: 0)
 .RE
 .PP
 \fBSchedulers\fR \fBKIST\fR|\fBKISTLite\fR|\fBVanilla\fR
@@ -691,8 +709,11 @@ If this option is set to 1, then Tor wil
 Specify the scheduler type that tor should use\&. The scheduler is responsible for moving data around within a Tor process\&. This is an ordered list by priority which means that the first value will be tried first and if unavailable, the second one is tried and so on\&. It is possible to change these values at runtime\&. This option mostly effects relays, and most operators should leave it set to its default value\&. (Default: KIST,KISTLite,Vanilla)
 
 The possible scheduler types are:
+
 \fBKIST\fR: Kernel\-Informed Socket Transport\&. Tor will use TCP information from the kernel to make informed decisions regarding how much data to send and when to send it\&. KIST also handles traffic in batches (see KISTSchedRunInterval) in order to improve traffic prioritization decisions\&. As implemented, KIST will only work on Linux kernel version 2\&.6\&.39 or higher\&.
+
 \fBKISTLite\fR: Same as KIST but without kernel support\&. Tor will use all the same mechanics as with KIST, including the batching, but its decisions regarding how much data to send will not be as good\&. KISTLite will work on all kernels and operating systems, and the majority of the benefits of KIST are still realized with KISTLite\&.
+
 \fBVanilla\fR: The scheduler that Tor used before KIST was implemented\&. It sends as much data as possible, as soon as possible\&. Vanilla will work on all kernels and operating systems\&.
 .RE
 .PP
@@ -713,8 +734,10 @@ The following options are useful only fo
 .RS 4
 When set along with UseBridges, instructs Tor to use the relay at "IP:ORPort" as a "bridge" relaying into the Tor network\&. If "fingerprint" is provided (using the same format as for DirAuthority), we will verify that the relay running at that location has the right fingerprint\&. We also use fingerprint to look up the bridge descriptor at the bridge authority, if it\(cqs provided and if UpdateBridgesFromAuthority is set too\&.
 
+
 If "transport" is provided, it must match a ClientTransportPlugin line\&. We then use that pluggable transport\(cqs proxy to transfer data to the bridge, rather than connecting to the bridge directly\&. Some transports use a transport\-specific method to work out the remote address to connect to\&. These transports typically ignore the "IP:ORPort" specified in the bridge line\&.
 
+
 Tor passes any "key=val" settings to the pluggable transport proxy as per\-connection arguments when connecting to the bridge\&. Consult the documentation of the pluggable transport for details of what arguments it supports\&.
 .RE
 .PP
@@ -758,10 +781,13 @@ If set to 1, Tor will not not hold OR co
 .RS 4
 A list of identity fingerprints, country codes, and address patterns of nodes to avoid when building a circuit\&. Country codes are 2\-letter ISO3166 codes, and must be wrapped in braces; fingerprints may be preceded by a dollar sign\&. (Example: ExcludeNodes ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, {cc}, 255\&.254\&.0\&.0/8)
 
+
 By default, this option is treated as a preference that Tor is allowed to override in order to keep working\&. For example, if you try to connect to a hidden service, but you have excluded all of the hidden service\(cqs introduction points, Tor will connect to one of them anyway\&. If you do not want this behavior, set the StrictNodes option (documented below)\&.
 
+
 Note also that if you are a relay, this (and the other node selection options below) only affects your own circuits that Tor builds for you\&. Clients can still build circuits through you to any node\&. Controllers can tell Tor to build circuits through any node\&.
 
+
 Country codes are case\-insensitive\&. The code "{??}" refers to nodes whose country can\(cqt be identified\&. No country code, including {??}, works if no GeoIPFile can be loaded\&. See also the GeoIPExcludeUnknown option below\&.
 .RE
 .PP
@@ -789,14 +815,18 @@ the Tor network\&. See the
 \fBExcludeNodes\fR
 option for more information on how to specify nodes\&.
 
+
 Note that if you list too few nodes here, or if you exclude too many exit nodes with ExcludeExitNodes, you can degrade functionality\&. For example, if none of the exits you list allows traffic on port 80 or 443, you won\(cqt be able to browse the web\&.
 
+
 Note also that not every circuit is used to deliver traffic
 \fBoutside\fR
 of the Tor network\&. It is normal to see non\-exit circuits (such as those used to connect to hidden services, those that do directory fetches, those used for relay reachability self\-tests, and so on) that end at a non\-exit node\&. To keep a node from being used entirely, see ExcludeNodes and StrictNodes\&.
 
+
 The ExcludeNodes option overrides this option: any node listed in both ExitNodes and ExcludeNodes is treated as excluded\&.
 
+
 The \&.exit address notation, if enabled via MapAddress, overrides this option\&.
 .RE
 .PP
@@ -804,6 +834,7 @@ The \&.exit address notation, if enabled
 .RS 4
 A list of identity fingerprints and country codes of nodes to use for the first hop in your normal circuits\&. Normal circuits include all circuits except for direct connections to directory servers\&. The Bridge option overrides this option; if you have configured bridges and UseBridges is 1, the Bridges are used as your entry nodes\&.
 
+
 The ExcludeNodes option overrides this option: any node listed in both EntryNodes and ExcludeNodes is treated as excluded\&. See the
 \fBExcludeNodes\fR
 option for more information on how to specify nodes\&.
@@ -853,6 +884,7 @@ is used\&. If
 \fBHTTPSProxy\fR
 is set then these connections will go through that proxy\&.
 
+
 The separation between
 \fBReachableORAddresses\fR
 and
@@ -887,6 +919,7 @@ is the fingerprint of the server), use "
 \fItorserver\fR
 is the fingerprint of the server), use "MapAddress *\&.example\&.com *\&.example\&.com\&.torserver\&.exit"\&. (Note the leading "*\&." in each part of the directive\&.) You can also redirect all subdomains of a domain to a single address\&. For example, "MapAddress *\&.example\&.com www\&.example\&.com"\&.
 
+
 NOTES:
 .sp
 .RS 4
@@ -1001,8 +1034,10 @@ If 1, Tor will not put two servers whose
 .RS 4
 Open this port to listen for connections from SOCKS\-speaking applications\&. Set this to 0 if you don\(cqt want to allow application connections via SOCKS\&. Set it to "auto" to have Tor pick a port for you\&. This directive can be specified multiple times to bind to multiple addresses/ports\&. If a unix domain socket is used, you may quote the path using standard C escape sequences\&. (Default: 9050)
 
+
 NOTE: Although this option allows you to specify an IP address other than localhost, you should do so only with extreme caution\&. The SOCKS protocol is unencrypted and (as we use it) unauthenticated, so exposing it in this way could leak your information to anybody watching your network, and allow anybody to use your computer as an open proxy\&.
 
+
 The
 \fIisolation flags\fR
 arguments give Tor rules for which streams received on this SocksPort are allowed to share circuits with one another\&. Recognized isolation flags are:
@@ -1149,7 +1184,7 @@ Let a socks connection wait NUM seconds
 .PP
 \fBTokenBucketRefillInterval\fR \fINUM\fR [\fBmsec\fR|\fBsecond\fR]
 .RS 4
-Set the refill interval of Tor\(cqs token bucket to NUM milliseconds\&. NUM must be between 1 and 1000, inclusive\&. Note that the configured bandwidth limits are still expressed in bytes per second: this option only affects the frequency with which Tor checks to see whether previously exhausted connections may read again\&. Can not be changed while tor is running\&. (Default: 100 msec)
+Set the refill delay interval of Tor\(cqs token bucket to NUM milliseconds\&. NUM must be between 1 and 1000, inclusive\&. When Tor is out of bandwidth, on a connection or globally, it will wait up to this long before it tries to use that connection again\&. Note that bandwidth limits are still expressed in bytes per second: this option only affects the frequency with which Tor checks to see whether previously exhausted connections may read again\&. Can not be changed while tor is running\&. (Default: 100 msec)
 .RE
 .PP
 \fBTrackHostExits\fR \fIhost\fR,\fI\&.domain\fR,\fI\&...\fR
@@ -1193,6 +1228,11 @@ This torrc option specifies whether clie
 If UseEntryGuards is set to 1, we will try to pick a total of NUM routers as long\-term entries for our circuits\&. If NUM is 0, we try to learn the number from the guard\-n\-primary\-guards\-to\-use consensus parameter, and default to 1 if the consensus parameter isn\(cqt set\&. (Default: 0)
 .RE
 .PP
+\fBNumPrimaryGuards\fR \fINUM\fR
+.RS 4
+If UseEntryGuards is set to 1, we will try to pick NUM routers for our primary guard list, which is the set of routers we strongly prefer when connecting to the Tor network\&. If NUM is 0, we try to learn the number from the guard\-n\-primary\-guards consensus parameter, and default to 3 if the consensus parameter isn\(cqt set\&. (Default: 0)
+.RE
+.PP
 \fBNumDirectoryGuards\fR \fINUM\fR
 .RS 4
 If UseEntryGuards is set to 1, we try to make sure we have at least NUM routers to use as directory guards\&. If this option is set to 0, use the value from the guard\-n\-primary\-dir\-guards\-to\-use consensus parameter, and default to 3 if the consensus parameter isn\(cqt set\&. (Default: 0)
@@ -1219,6 +1259,7 @@ When this option is enabled, Tor will ma
 .RS 4
 When Tor needs to assign a virtual (unused) address because of a MAPADDRESS command from the controller or the AutomapHostsOnResolve feature, Tor picks an unassigned address from this range\&. (Defaults: 127\&.192\&.0\&.0/10 and [FE80::]/10 respectively\&.)
 
+
 When providing proxy server service to a network of computers using a tool like dns\-proxy\-tor, change the IPv4 network to "10\&.192\&.0\&.0/10" or "172\&.16\&.0\&.0/12" and change the IPv6 network to "[FC00::]/7"\&. The default
 \fBVirtualAddrNetwork\fR
 address ranges on a properly configured machine will route to the loopback or link\-local interface\&. The maximum number of bits for the network prefix is set to 104 for IPv6 and 16 for IPv4\&. However, a wider network \- smaller prefix length
@@ -1242,13 +1283,14 @@ When this option is disabled, Tor blocks
 .PP
 \fBHTTPTunnelPort\fR [\fIaddress\fR:]\fIport\fR|\fBauto\fR [\fIisolation flags\fR]
 .RS 4
-Open this port to listen for proxy connections using the "HTTP CONNECT" protocol instead of SOCKS\&. Set this to 0 0 if you don\(cqt want to allow "HTTP CONNECT" connections\&. Set the port to "auto" to have Tor pick a port for you\&. This directive can be specified multiple times to bind to multiple addresses/ports\&. See SOCKSPort for an explanation of isolation flags\&. (Default: 0)
+Open this port to listen for proxy connections using the "HTTP CONNECT" protocol instead of SOCKS\&. Set this to 0 if you don\(cqt want to allow "HTTP CONNECT" connections\&. Set the port to "auto" to have Tor pick a port for you\&. This directive can be specified multiple times to bind to multiple addresses/ports\&. See SOCKSPort for an explanation of isolation flags\&. (Default: 0)
 .RE
 .PP
 \fBTransPort\fR [\fIaddress\fR:]\fIport\fR|\fBauto\fR [\fIisolation flags\fR]
 .RS 4
 Open this port to listen for transparent proxy connections\&. Set this to 0 if you don\(cqt want to allow transparent proxy connections\&. Set the port to "auto" to have Tor pick a port for you\&. This directive can be specified multiple times to bind to multiple addresses/ports\&. See SOCKSPort for an explanation of isolation flags\&.
 
+
 TransPort requires OS support for transparent proxies, such as BSDs\*(Aq pf or Linux\(cqs IPTables\&. If you\(cqre planning to use Tor as a transparent proxy for a network, you\(cqll want to examine and change VirtualAddrNetwork from the default setting\&. (Default: 0)
 .RE
 .PP
@@ -1256,10 +1298,13 @@ TransPort requires OS support for transp
 .RS 4
 TransProxyType may only be enabled when there is transparent proxy listener enabled\&.
 
+
 Set this to "TPROXY" if you wish to be able to use the TPROXY Linux module to transparently proxy connections that are configured using the TransPort option\&. Detailed information on how to configure the TPROXY feature can be found in the Linux kernel source tree in the file Documentation/networking/tproxy\&.txt\&.
 
+
 Set this option to "ipfw" to use the FreeBSD ipfw interface\&.
 
+
 On *BSD operating systems when using pf, set this to "pf\-divert" to take advantage of
 divert\-to
 rules, which do not modify the packets like
@@ -1270,17 +1315,20 @@ rules can be found in the pf\&.conf(5) m
 divert\-to
 is available to use on versions greater than or equal to OpenBSD 4\&.4\&.
 
+
 Set this to "default", or leave it unconfigured, to use regular IPTables on Linux, or to use pf
 rdr\-to
 rules on *BSD systems\&.
 
-(Default: "default"\&.)
+
+(Default: "default")
 .RE
 .PP
 \fBNATDPort\fR [\fIaddress\fR:]\fIport\fR|\fBauto\fR [\fIisolation flags\fR]
 .RS 4
 Open this port to listen for connections from old versions of ipfw (as included in old versions of FreeBSD, etc) using the NATD protocol\&. Use 0 if you don\(cqt want to allow NATD connections\&. Set the port to "auto" to have Tor pick a port for you\&. This directive can be specified multiple times to bind to multiple addresses/ports\&. See SocksPort for an explanation of isolation flags\&.
 
+
 This option is only for people who cannot use TransPort\&. (Default: 0)
 .RE
 .PP
@@ -1346,10 +1394,13 @@ be used when running a tor2web Hidden Se
 .RS 4
 A list of identity fingerprints, nicknames, country codes and address patterns of nodes that are allowed to be used as RPs in HS circuits; any other nodes will not be used as RPs\&. (Example: Tor2webRendezvousPoints Fastyfasty, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, {cc}, 255\&.254\&.0\&.0/8)
 
+
 This feature can only be used if Tor2webMode is also enabled\&.
 
+
 ExcludeNodes have higher priority than Tor2webRendezvousPoints, which means that nodes specified in ExcludeNodes will not be picked as RPs\&.
 
+
 If no nodes in Tor2webRendezvousPoints are currently available for use, Tor will choose a random node when building HS circuits\&.
 .RE
 .PP
@@ -1359,6 +1410,7 @@ A list of identity fingerprints, nicknam
 
 (Example: HSLayer2Nodes ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, {cc}, 255\&.254\&.0\&.0/8)
 
+
 When this is set, the resulting hidden service paths will look like:
 
 C \- G \- L2 \- M \- Rend
@@ -1373,6 +1425,7 @@ S \- G \- L2 \- M \- HSDir
 
 S \- G \- L2 \- M \- Intro
 
+
 where C is this client, S is the service, G is the Guard node, L2 is a node from this option, and M is a random middle node\&. Rend, HSDir, and Intro point selection is not affected by this option\&.
 
 This option may be combined with HSLayer3Nodes to create paths of the form:
@@ -1389,8 +1442,11 @@ S \- G \- L2 \- L3 \- HSDir
 
 S \- G \- L2 \- L3 \- Intro
 
+
 ExcludeNodes have higher priority than HSLayer2Nodes, which means that nodes specified in ExcludeNodes will not be picked\&.
 
+When either this option or HSLayer3Nodes are set, the /16 subnet and node family restrictions are removed for hidden service circuits\&. Additionally, we allow the guard node to be present as the Rend, HSDir, and IP node, and as the hop before it\&. This is done to prevent the adversary from inferring information about our guard, layer2, and layer3 node choices at later points in the path\&.
+
 This option is meant to be managed by a Tor controller such as
 https://github\&.com/mikeperry\-tor/vanguards
 that selects and updates this set of nodes for you\&. Hence it does not do load balancing if fewer than 20 nodes are selected, and if no nodes in HSLayer2Nodes are currently available for use, Tor will not work\&. Please use extreme care if you are setting this option manually\&.
@@ -1402,6 +1458,7 @@ A list of identity fingerprints, nicknam
 
 (Example: HSLayer3Nodes ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, {cc}, 255\&.254\&.0\&.0/8)
 
+
 When this is set by itself, the resulting hidden service paths will look like:
 
 C \- G \- M \- L3 \- Rend
@@ -1432,8 +1489,11 @@ S \- G \- L2 \- L3 \- HSDir
 
 S \- G \- L2 \- L3 \- Intro
 
+
 ExcludeNodes have higher priority than HSLayer3Nodes, which means that nodes specified in ExcludeNodes will not be picked\&.
 
+When either this option or HSLayer2Nodes are set, the /16 subnet and node family restrictions are removed for hidden service circuits\&. Additionally, we allow the guard node to be present as the Rend, HSDir, and IP node, and as the hop before it\&. This is done to prevent the adversary from inferring information about our guard, layer2, and layer3 node choices at later points in the path\&.
+
 This option is meant to be managed by a Tor controller such as
 https://github\&.com/mikeperry\-tor/vanguards
 that selects and updates this set of nodes for you\&. Hence it does not do load balancing if fewer than 20 nodes are selected, and if no nodes in HSLayer3Nodes are currently available for use, Tor will not work\&. Please use extreme care if you are setting this option manually\&.
@@ -1458,12 +1518,15 @@ Microdescriptors are a smaller version o
 .RS 4
 These options override the default behavior of Tor\(cqs (\fBcurrently experimental\fR) path bias detection algorithm\&. To try to find broken or misbehaving guard nodes, Tor looks for nodes where more than a certain fraction of circuits through that guard fail to get built\&.
 
+
 The PathBiasCircThreshold option controls how many circuits we need to build through a guard before we make these checks\&. The PathBiasNoticeRate, PathBiasWarnRate and PathBiasExtremeRate options control what fraction of circuits must succeed through a guard so we won\(cqt write log messages\&. If less than PathBiasExtremeRate circuits succeed
 \fBand\fR
 PathBiasDropGuards is set to 1, we disable use of that guard\&.
 
+
 When we have seen more than PathBiasScaleThreshold circuits through a guard, we scale our observations by 0\&.5 (governed by the consensus) so that new observations don\(cqt get swamped by old ones\&.
 
+
 By default, or if a negative value is provided for one of these options, Tor uses reasonable defaults from the networkstatus consensus document\&. If no defaults are available there, these options default to 150, \&.70, \&.50, \&.30, 0, and 300 respectively\&.
 .RE
 .sp
@@ -1477,8 +1540,10 @@ By default, or if a negative value is pr
 .RS 4
 Similar to the above options, these options override the default behavior of Tor\(cqs (\fBcurrently experimental\fR) path use bias detection algorithm\&.
 
+
 Where as the path bias parameters govern thresholds for successfully building circuits, these four path use bias parameters govern thresholds only for circuit usage\&. Circuits which receive no stream usage are not counted by this detection algorithm\&. A used circuit is considered successful if it is capable of carrying streams or otherwise receiving well\-formed responses to RELAY cells\&.
 
+
 By default, or if a negative value is provided for one of these options, Tor uses reasonable defaults from the networkstatus consensus document\&. If no defaults are available there, these options default to 20, \&.80, \&.60, and 100, respectively\&.
 .RE
 .PP
@@ -1510,22 +1575,22 @@ If this option is set to 1, Tor prefers
 .PP
 \fBPathsNeededToBuildCircuits\fR \fINUM\fR
 .RS 4
-Tor clients don\(cqt build circuits for user traffic until they know about enough of the network so that they could potentially construct enough of the possible paths through the network\&. If this option is set to a fraction between 0\&.25 and 0\&.95, Tor won\(cqt build circuits until it has enough descriptors or microdescriptors to construct that fraction of possible paths\&. Note that setting this option too low can make your Tor client less anonymous, and setting it too high can prevent your Tor client from bootstrapping\&. If this option is negative, Tor will use a default value chosen by the directory authorities\&. If the directory authorities do not choose a value, Tor will default to 0\&.6\&. (Default: \-1\&.)
+Tor clients don\(cqt build circuits for user traffic until they know about enough of the network so that they could potentially construct enough of the possible paths through the network\&. If this option is set to a fraction between 0\&.25 and 0\&.95, Tor won\(cqt build circuits until it has enough descriptors or microdescriptors to construct that fraction of possible paths\&. Note that setting this option too low can make your Tor client less anonymous, and setting it too high can prevent your Tor client from bootstrapping\&. If this option is negative, Tor will use a default value chosen by the directory authorities\&. If the directory authorities do not choose a value, Tor will default to 0\&.6\&. (Default: \-1)
 .RE
 .PP
-\fBClientBootstrapConsensusAuthorityDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBClientBootstrapConsensusAuthorityDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download consensuses from authorities if they are bootstrapping (that is, they don\(cqt have a usable, reasonably live consensus)\&. Only used by clients fetching from a list of fallback directory mirrors\&. This schedule is advanced by (potentially concurrent) connection attempts, unlike other schedules, which are advanced by connection failures\&. (Default: 6, 11, 3600, 10800, 25200, 54000, 111600, 262800)
+Initial delay in seconds for when clients should download consensuses from authorities if they are bootstrapping (that is, they don\(cqt have a usable, reasonably live consensus)\&. Only used by clients fetching from a list of fallback directory mirrors\&. This schedule is advanced by (potentially concurrent) connection attempts, unlike other schedules, which are advanced by connection failures\&. (Default: 6)
 .RE
 .PP
-\fBClientBootstrapConsensusFallbackDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBClientBootstrapConsensusFallbackDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download consensuses from fallback directory mirrors if they are bootstrapping (that is, they don\(cqt have a usable, reasonably live consensus)\&. Only used by clients fetching from a list of fallback directory mirrors\&. This schedule is advanced by (potentially concurrent) connection attempts, unlike other schedules, which are advanced by connection failures\&. (Default: 0, 1, 4, 11, 3600, 10800, 25200, 54000, 111600, 262800)
+Initial delay in seconds for when clients should download consensuses from fallback directory mirrors if they are bootstrapping (that is, they don\(cqt have a usable, reasonably live consensus)\&. Only used by clients fetching from a list of fallback directory mirrors\&. This schedule is advanced by (potentially concurrent) connection attempts, unlike other schedules, which are advanced by connection failures\&. (Default: 0)
 .RE
 .PP
-\fBClientBootstrapConsensusAuthorityOnlyDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download consensuses from authorities if they are bootstrapping (that is, they don\(cqt have a usable, reasonably live consensus)\&. Only used by clients which don\(cqt have or won\(cqt fetch from a list of fallback directory mirrors\&. This schedule is advanced by (potentially concurrent) connection attempts, unlike other schedules, which are advanced by connection failures\&. (Default: 0, 3, 7, 3600, 10800, 25200, 54000, 111600, 262800)
+Initial delay in seconds for when clients should download consensuses from authorities if they are bootstrapping (that is, they don\(cqt have a usable, reasonably live consensus)\&. Only used by clients which don\(cqt have or won\(cqt fetch from a list of fallback directory mirrors\&. This schedule is advanced by (potentially concurrent) connection attempts, unlike other schedules, which are advanced by connection failures\&. (Default: 0)
 .RE
 .PP
 \fBClientBootstrapConsensusMaxInProgressTries\fR \fINUM\fR
@@ -1564,6 +1629,7 @@ Note: as of Oct 2017, the BridgeDB part
 .RS 4
 Administrative contact information for this relay or bridge\&. This line can be used to contact you if your relay or bridge is misconfigured or something else goes wrong\&. Note that we archive and publish all descriptors containing these lines and that Google indexes them, so spammers might also collect them\&. You may want to obscure the fact that it\(cqs an email address and/or generate a new address for this purpose\&.
 
+
 ContactInfo
 \fBmust\fR
 be set to a working address if you run more than one relay or bridge\&. (Really, everybody running a relay or bridge should set it\&.)
@@ -1573,34 +1639,45 @@ be set to a working address if you run m
 .RS 4
 Tells Tor whether to run as an exit relay\&. If Tor is running as a non\-bridge server, and ExitRelay is set to 1, then Tor allows traffic to exit according to the ExitPolicy option (or the default ExitPolicy if none is specified)\&.
 
+
 If ExitRelay is set to 0, no traffic is allowed to exit, and the ExitPolicy option is ignored\&.
 
+
 If ExitRelay is set to "auto", then Tor behaves as if it were set to 1, but warns the user if this would cause traffic to exit\&. In a future version, the default value will be 0\&. (Default: auto)
 .RE
 .PP
 \fBExitPolicy\fR \fIpolicy\fR,\fIpolicy\fR,\fI\&...\fR
 .RS 4
-Set an exit policy for this server\&. Each policy is of the form "\fBaccept[6]\fR|\fBreject[6]\fR\fIADDR\fR[/\fIMASK\fR][:\fIPORT\fR]"\&. If /\fIMASK\fR
+Set an exit policy for this server\&. Each policy is of the form "\fBaccept[6]\fR|\fBreject[6]\fR
+\fIADDR\fR[/\fIMASK\fR][:\fIPORT\fR]"\&. If /\fIMASK\fR
 is omitted then this policy just applies to the host given\&. Instead of giving a host or network you can also use "*" to denote the universe (0\&.0\&.0\&.0/0 and ::/0), or *4 to denote all IPv4 addresses, and *6 to denote all IPv6 addresses\&.
 \fIPORT\fR
 can be a single port number, an interval of ports "\fIFROM_PORT\fR\-\fITO_PORT\fR", or "*"\&. If
 \fIPORT\fR
 is omitted, that means "*"\&.
 
+
 For example, "accept 18\&.7\&.22\&.69:*,reject 18\&.0\&.0\&.0/8:*,accept *:*" would reject any IPv4 traffic destined for MIT except for web\&.mit\&.edu, and accept any other IPv4 or IPv6 traffic\&.
 
+
 Tor also allows IPv6 exit policy entries\&. For instance, "reject6 [FC00::]/7:*" rejects all destinations that share 7 most significant bit prefix with address FC00::\&. Respectively, "accept6 [C000::]/3:*" accepts all destinations that share 3 most significant bit prefix with address C000::\&.
 
+
 accept6 and reject6 only produce IPv6 exit policy entries\&. Using an IPv4 address with accept6 or reject6 is ignored and generates a warning\&. accept/reject allows either IPv4 or IPv6 addresses\&. Use *4 as an IPv4 wildcard address, and *6 as an IPv6 wildcard address\&. accept/reject * expands to matching IPv4 and IPv6 wildcard address rules\&.
 
+
 To specify all IPv4 and IPv6 internal and link\-local networks (including 0\&.0\&.0\&.0/8, 169\&.254\&.0\&.0/16, 127\&.0\&.0\&.0/8, 192\&.168\&.0\&.0/16, 10\&.0\&.0\&.0/8, 172\&.16\&.0\&.0/12, [::]/8, [FC00::]/7, [FE80::]/10, [FEC0::]/10, [FF00::]/8, and [::]/127), you can use the "private" alias instead of an address\&. ("private" always produces rules for IPv4 and IPv6 addresses, even when used with accept6/reject6\&.)
 
+
 Private addresses are rejected by default (at the beginning of your exit policy), along with any configured primary public IPv4 and IPv6 addresses\&. These private addresses are rejected unless you set the ExitPolicyRejectPrivate config option to 0\&. For example, once you\(cqve done that, you could allow HTTP to 127\&.0\&.0\&.1 and block all other connections to internal networks with "accept 127\&.0\&.0\&.1:80,reject private:*", though that may also allow connections to your own computer that are addressed to its public (external) IP address\&. See RFC 1918 and RFC 3330 for more details about internal and reserved IP address space\&. See ExitPolicyRejectLocalInterfaces if you want to block every address on the relay, even those that aren\(cqt advertised in the descriptor\&.
 
+
 This directive can be specified multiple times so you don\(cqt have to put it all on one line\&.
 
+
 Policies are considered first to last, and the first match wins\&. If you want to allow the same ports on IPv4 and IPv6, write your rules using accept/reject *\&. If you want to allow different ports on IPv4 and IPv6, write your IPv6 rules using accept6/reject6 *6, and your IPv4 rules using accept/reject *4\&. If you want to _replace_ the default exit policy, end your exit policy with either a reject *:* or an accept *:*\&. Otherwise, you\(cqre _augmenting_ (prepending to) the default exit policy\&.
 
+
 If you want to use a reduced exit policy rather than the default exit policy, set "ReducedExitPolicy 1"\&. If you want to
 \fIreplace\fR
 the default exit policy with your custom exit policy, end your exit policy with either a reject
@@ -1610,6 +1687,7 @@ or an accept
 \fIaugmenting\fR
 (prepending to) the default or reduced exit policy\&.
 
+
 The default exit policy is:
 .sp
 .if n \{\
@@ -1651,8 +1729,10 @@ Reject all IPv4 and IPv6 addresses that
 .RS 4
 If set, use a reduced exit policy rather than the default one\&.
 
+
 The reduced exit policy is an alternative to the default exit policy\&. It allows as many Internet services as possible while still blocking the majority of TCP ports\&. Currently, the policy allows approximately 65 ports\&. This reduces the odds that your node will be used for peer\-to\-peer applications\&.
 
+
 The reduced exit policy is:
 .sp
 .if n \{\
@@ -1768,8 +1848,10 @@ If we have more onionskins queued for pr
 .RS 4
 Declare that this Tor relay is controlled or administered by a group or organization identical or similar to that of the other relays, defined by their (possibly $\-prefixed) identity fingerprints\&. This option can be repeated many times, for convenience in defining large families: all fingerprints in all MyFamily lines are merged into one list\&. When two relays both declare that they are in the same \*(Aqfamily\*(Aq, Tor clients will not use them in the same circuit\&. (Each relay only needs to list the other servers in its family; it doesn\(cqt need to list itself, but it won\(cqt hurt if it does\&.) Do not list any bridge relay as it would compromise its concealment\&.
 
+
 When listing a node, it\(cqs better to list it by fingerprint than by nickname: fingerprints are more reliable\&.
 
+
 If you run more than one relay, the MyFamily option on each relay
 \fBmust\fR
 list all other relays, as described above\&.
@@ -1777,7 +1859,9 @@ list all other relays, as described abov
 .PP
 \fBNickname\fR \fIname\fR
 .RS 4
-Set the server\(cqs nickname to \*(Aqname\*(Aq\&. Nicknames must be between 1 and 19 characters inclusive, and must contain only the characters [a\-zA\-Z0\-9]\&.
+Set the server\(cqs nickname to \*(Aqname\*(Aq\&. Nicknames must be between 1 and 19 characters inclusive, and must contain only the characters [a\-zA\-Z0\-9]\&. If not set,
+\fBUnnamed\fR
+will be used\&. Relays can always be uniquely identified by their identity fingerprints\&.
 .RE
 .PP
 \fBNumCPUs\fR \fInum\fR
@@ -1789,6 +1873,7 @@ How many processes to use at once for de
 .RS 4
 Advertise this port to listen for connections from Tor clients and servers\&. This option is required to be a Tor server\&. Set it to "auto" to have Tor pick a port for you\&. Set it to 0 to not run an ORPort at all\&. This option can occur more than once\&. (Default: 0)
 
+
 Tor recognizes these flags on each ORPort:
 .PP
 \fBNoAdvertise\fR
@@ -1816,20 +1901,11 @@ If the address is absent, or resolves to
 For obvious reasons, NoAdvertise and NoListen are mutually exclusive, and IPv4Only and IPv6Only are mutually exclusive\&.
 .RE
 .PP
-\fBPortForwarding\fR \fB0\fR|\fB1\fR
-.RS 4
-Attempt to automatically forward the DirPort and ORPort on a NAT router connecting this Tor server to the Internet\&. If set, Tor will try both NAT\-PMP (common on Apple routers) and UPnP (common on routers from other manufacturers)\&. (Default: 0)
-.RE
-.PP
-\fBPortForwardingHelper\fR \fIfilename\fR|\fIpathname\fR
-.RS 4
-If PortForwarding is set, use this executable to configure the forwarding\&. If set to a filename, the system path will be searched for the executable\&. If set to a path, only the specified path will be executed\&. (Default: tor\-fw\-helper)
-.RE
-.PP
 \fBPublishServerDescriptor\fR \fB0\fR|\fB1\fR|\fBv3\fR|\fBbridge\fR,\fB\&...\fR
 .RS 4
 This option specifies which descriptors Tor will publish when acting as a relay\&. You can choose multiple arguments, separated by commas\&.
 
+
 If this option is set to 0, Tor will not publish its descriptors to any directories\&. (This is useful if you\(cqre testing out your server, or if you\(cqre using a Tor controller that handles directory publishing for you\&.) Otherwise, Tor will publish its descriptors of all type(s) specified\&. The default is "1", which means "if running as a relay or bridge, publish descriptors to the appropriate authorities"\&. Other possibilities are "v3", meaning "publish as if you\(cqre a relay", and "bridge", meaning "publish as if you\(cqre a bridge"\&.
 .RE
 .PP
@@ -1959,7 +2035,7 @@ Relays only\&. When this option is enabl
 .PP
 \fBPaddingStatistics\fR \fB0\fR|\fB1\fR
 .RS 4
-Relays only\&. When this option is enabled, Tor collects statistics for padding cells sent and received by this relay, in addition to total cell counts\&. These statistics are rounded, and omitted if traffic is low\&. This information is important for load balancing decisions related to padding\&. (Default: 1)
+Relays only\&. When this option is enabled, Tor collects statistics for padding cells sent and received by this relay, in addition to total cell counts\&. These statistics are rounded, and omitted if traffic is low\&. This information is important for load balancing decisions related to padding\&. If ExtraInfoStatistics is enabled, it will be published as a part of extra\-info document\&. (Default: 1)
 .RE
 .PP
 \fBDirReqStatistics\fR \fB0\fR|\fB1\fR
@@ -2026,6 +2102,11 @@ Store secret keys in DIR\&. Can not be c
 .RS 4
 If this option is set to 0, don\(cqt allow the filesystem group to read the KeywDirectory\&. If the option is set to 1, make the KeyDirectory readable by the default GID\&. (Default: 0)
 .RE
+.PP
+\fBRephistTrackTime\fR \fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fR
+.RS 4
+Tells an authority, or other node tracking node reliability and history, that fine\-grained information about nodes can be discarded when it hasn\(cqt changed for a given amount of time\&. (Default: 24 hours)
+.RE
 .SH "DIRECTORY SERVER OPTIONS"
 .sp
 The following options are useful only for directory servers\&. (Relays with enough bandwidth automatically become directory servers; see DirCache for details\&.)
@@ -2041,6 +2122,7 @@ If this option is nonzero, advertise the
 \fBNoAdvertise\fR
 flag set\&. (Default: 0)
 
+
 The same flags are supported here as are supported by ORPort\&.
 .RE
 .PP
@@ -2262,6 +2344,7 @@ Authoritative directories only\&. A set
 \fBAuthDirListBadExits\fR
 is set\&.
 
+
 (The address pattern syntax here and in the options below is the same as for exit policies, except that you don\(cqt need to say "accept" or "reject", and ports are not needed\&.)
 .RE
 .PP
@@ -2356,11 +2439,6 @@ V3 authoritative directories only\&. Con
 If set, the directory authority will sign consensuses not only with its own signing key, but also with a "legacy" key and certificate with a different identity\&. This feature is used to migrate directory authority keys in the event of a compromise\&. (Default: 0)
 .RE
 .PP
-\fBRephistTrackTime\fR \fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fR
-.RS 4
-Tells an authority, or other node tracking node reliability and history, that fine\-grained information about nodes can be discarded when it hasn\(cqt changed for a given amount of time\&. (Default: 24 hours)
-.RE
-.PP
 \fBAuthDirHasIPv6Connectivity\fR \fB0\fR|\fB1\fR
 .RS 4
 Authoritative directories only\&. When set to 0, OR ports with an IPv6 address are not included in the authority\(cqs votes\&. When set to 1, IPv6 OR ports are tested for reachability like IPv4 OR ports\&. If the reachability test succeeds, the authority votes for the IPv6 ORPort, and votes Running for the relay\&. If the reachability test fails, the authority does not vote for the IPv6 ORPort, and does not vote Running (Default: 0)
@@ -2488,11 +2566,14 @@ Number of introduction points the hidden
 .RS 4
 \fBExperimental \- Non Anonymous\fR
 Hidden Services on a tor instance in HiddenServiceSingleHopMode make one\-hop (direct) circuits between the onion service server, and the introduction and rendezvous points\&. (Onion service descriptors are still posted using 3\-hop paths, to avoid onion service directories blocking the service\&.) This option makes every hidden service instance hosted by a tor instance a Single Onion Service\&. One\-hop circuits make Single Onion servers easily locatable, but clients remain location\-anonymous\&. However, the fact that a client is accessing a Single Onion rather than a Hidden Service may be statistically distinguishable\&.
+
+
 \fBWARNING:\fR
 Once a hidden service directory has been used by a tor instance in HiddenServiceSingleHopMode, it can
 \fBNEVER\fR
 be used again for a hidden service\&. It is best practice to create a new hidden service directory, key, and address for each new Single Onion Service and Hidden Service\&. It is not possible to run Single Onion Services and Hidden Services from the same tor instance: they should be run on different servers with different IP addresses\&.
 
+
 HiddenServiceSingleHopMode requires HiddenServiceNonAnonymousMode to be set to 1\&. Since a Single Onion service is non\-anonymous, you can not configure a SOCKSPort on a tor instance that is running in
 \fBHiddenServiceSingleHopMode\fR\&. Can not be changed while tor is running\&. (Default: 0)
 .RE
@@ -2520,12 +2601,9 @@ EnforceDistinctSubnets 0
 AssumeReachable 1
 AuthDirMaxServersPerAddr 0
 AuthDirMaxServersPerAuthAddr 0
-ClientBootstrapConsensusAuthorityDownloadSchedule 0, 2,
-   4 (for 40 seconds), 8, 16, 32, 60
-ClientBootstrapConsensusFallbackDownloadSchedule 0, 1,
-   4 (for 40 seconds), 8, 16, 32, 60
-ClientBootstrapConsensusAuthorityOnlyDownloadSchedule 0, 1,
-   4 (for 40 seconds), 8, 16, 32, 60
+ClientBootstrapConsensusAuthorityDownloadInitialDelay 0
+ClientBootstrapConsensusFallbackDownloadInitialDelay 0
+ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay 0
 ClientDNSRejectInternalAddresses 0
 ClientRejectInternalAddresses 0
 CountPrivateBandwidth 1
@@ -2540,17 +2618,16 @@ TestingV3AuthInitialVoteDelay 20 seconds
 TestingV3AuthInitialDistDelay 20 seconds
 TestingAuthDirTimeToLearnReachability 0 minutes
 TestingEstimatedDescriptorPropagationTime 0 minutes
-TestingServerDownloadSchedule 0, 0, 0, 5, 10, 15, 20, 30, 60
-TestingClientDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-TestingServerConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-TestingClientConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-TestingBridgeDownloadSchedule 10, 30, 60
-TestingBridgeBootstrapDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+TestingServerDownloadInitialDelay 0
+TestingClientDownloadInitialDelay 0
+TestingServerConsensusDownloadInitialDelay 0
+TestingClientConsensusDownloadInitialDelay 0
+TestingBridgeDownloadInitialDelay 10
+TestingBridgeBootstrapDownloadInitialDelay 0
 TestingClientMaxIntervalWithoutRequest 5 seconds
 TestingDirConnectionMaxStall 30 seconds
 TestingEnableConnBwEvent 1
 TestingEnableCellStatsEvent 1
-TestingEnableTbEmptyEvent 1
 .fi
 .if n \{\
 .RE
@@ -2604,46 +2681,46 @@ is set\&. (Default: 10 minutes)
 Minimum value for the Fast flag\&. Overrides the ordinary minimum taken from the consensus when TestingTorNetwork is set\&. (Default: 0\&.)
 .RE
 .PP
-\fBTestingServerDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBTestingServerDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when servers should download things in general\&. Changing this requires that
+Initial delay in seconds for when servers should download things in general\&. Changing this requires that
 \fBTestingTorNetwork\fR
-is set\&. (Default: 0, 0, 0, 60, 60, 120, 300, 900, 2147483647)
+is set\&. (Default: 0)
 .RE
 .PP
-\fBTestingClientDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBTestingClientDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download things in general\&. Changing this requires that
+Initial delay in seconds for when clients should download things in general\&. Changing this requires that
 \fBTestingTorNetwork\fR
-is set\&. (Default: 0, 0, 60, 300, 600, 2147483647)
+is set\&. (Default: 0)
 .RE
 .PP
-\fBTestingServerConsensusDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBTestingServerConsensusDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when servers should download consensuses\&. Changing this requires that
+Initial delay in seconds for when servers should download consensuses\&. Changing this requires that
 \fBTestingTorNetwork\fR
-is set\&. (Default: 0, 0, 60, 300, 600, 1800, 1800, 1800, 1800, 1800, 3600, 7200)
+is set\&. (Default: 0)
 .RE
 .PP
-\fBTestingClientConsensusDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBTestingClientConsensusDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download consensuses\&. Changing this requires that
+Initial delay in seconds for when clients should download consensuses\&. Changing this requires that
 \fBTestingTorNetwork\fR
-is set\&. (Default: 0, 0, 60, 300, 600, 1800, 3600, 3600, 3600, 10800, 21600, 43200)
+is set\&. (Default: 0)
 .RE
 .PP
-\fBTestingBridgeDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBTestingBridgeDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download each bridge descriptor when they know that one or more of their configured bridges are running\&. Changing this requires that
+Initial delay in seconds for when clients should download each bridge descriptor when they know that one or more of their configured bridges are running\&. Changing this requires that
 \fBTestingTorNetwork\fR
-is set\&. (Default: 10800, 25200, 54000, 111600, 262800)
+is set\&. (Default: 10800)
 .RE
 .PP
-\fBTestingBridgeBootstrapDownloadSchedule\fR \fIN\fR,\fIN\fR,\fI\&...\fR
+\fBTestingBridgeBootstrapDownloadInitialDelay\fR \fIN\fR
 .RS 4
-Schedule for when clients should download each bridge descriptor when they have just started, or when they can not contact any of their bridges\&. Changing this requires that
+Initial delay in seconds for when clients should download each bridge descriptor when they have just started, or when they can not contact any of their bridges\&. Changing this requires that
 \fBTestingTorNetwork\fR
-is set\&. (Default: 0, 30, 90, 600, 3600, 10800, 25200, 54000, 111600, 262800)
+is set\&. (Default: 0)
 .RE
 .PP
 \fBTestingClientMaxIntervalWithoutRequest\fR \fIN\fR \fBseconds\fR|\fBminutes\fR
@@ -2666,6 +2743,7 @@ A list of identity fingerprints, country
 \fBExcludeNodes\fR
 option for more information on how to specify nodes\&.
 
+
 In order for this option to have any effect,
 \fBTestingTorNetwork\fR
 has to be set\&. See the
@@ -2679,6 +2757,7 @@ If True (1), a node will never receive t
 \fBTestingDirAuthVoteExit\fR
 list, regardless of its uptime, bandwidth, or exit policy\&.
 
+
 In order for this option to have any effect,
 \fBTestingTorNetwork\fR
 has to be set\&.
@@ -2690,6 +2769,7 @@ A list of identity fingerprints and coun
 \fBExcludeNodes\fR
 option for more information on how to specify nodes\&.
 
+
 In order for this option to have any effect,
 \fBTestingTorNetwork\fR
 has to be set\&.
@@ -2701,6 +2781,7 @@ If True (1), a node will never receive t
 \fBTestingDirAuthVoteGuard\fR
 list, regardless of its uptime and bandwidth\&.
 
+
 In order for this option to have any effect,
 \fBTestingTorNetwork\fR
 has to be set\&.
@@ -2712,6 +2793,7 @@ A list of identity fingerprints and coun
 \fBExcludeNodes\fR
 option for more information on how to specify nodes\&.
 
+
 In order for this option to have any effect,
 \fBTestingTorNetwork\fR
 must be set\&.
@@ -2723,6 +2805,7 @@ If True (1), a node will never receive t
 \fBTestingDirAuthVoteHSDir\fR
 list, regardless of its uptime and DirPort\&.
 
+
 In order for this option to have any effect,
 \fBTestingTorNetwork\fR
 has to be set\&.
@@ -2742,13 +2825,6 @@ If this option is set, then Tor controll
 is set\&. (Default: 0)
 .RE
 .PP
-\fBTestingEnableTbEmptyEvent\fR \fB0\fR|\fB1\fR
-.RS 4
-If this option is set, then Tor controllers may register for TB_EMPTY events\&. Changing this requires that
-\fBTestingTorNetwork\fR
-is set\&. (Default: 0)
-.RE
-.PP
 \fBTestingMinExitFlagThreshold\fR \fIN\fR \fBKBytes\fR|\fBMBytes\fR|\fBGBytes\fR|\fBTBytes\fR|\fBKBits\fR|\fBMBits\fR|\fBGBits\fR|\fBTBits\fR
 .RS 4
 Sets a lower\-bound for assigning an exit flag when running as an authority on a testing network\&. Overrides the usual default lower bound of 4 KB\&. (Default: 0)
@@ -2772,7 +2848,7 @@ Overrides the default lifetime for a sig
 .RS 4
 How early before the official expiration of a an Ed25519 signing key do we replace it and issue a new key? (Default: 3 hours for link and auth; 1 day for signing\&.)
 .RE
-.SH "NON-PERSISTENT OPTIONS"
+.SH "NON\-PERSISTENT OPTIONS"
 .sp
 These options are not saved to the torrc file by the "SAVECONF" controller command\&. Other options of this type are documented in control\-spec\&.txt, section 5\&.4\&. End\-users should mostly ignore them\&.
 .PP
diff -pruN 0.3.3.9-1/doc/tor.1.txt 0.3.4.8-1/doc/tor.1.txt
--- 0.3.3.9-1/doc/tor.1.txt	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/doc/tor.1.txt	2018-06-15 21:20:53.000000000 +0000
@@ -311,7 +311,9 @@ GENERAL OPTIONS
     other than controller connections, and we close (and don't reattempt)
     any outbound
     connections.  Controllers sometimes use this option to avoid using
-    the network until Tor is fully configured. (Default: 0)
+    the network until Tor is fully configured.  Tor will make still certain
+    network-related calls (like DNS lookups) as a part of its configuration
+    process, even if DisableNetwork is set. (Default: 0)
 
 [[ConstrainedSockets]] **ConstrainedSockets** **0**|**1**::
     If set, Tor will tell the kernel to attempt to shrink the buffers for all
@@ -366,7 +368,8 @@ GENERAL OPTIONS
 
 [[ControlSocket]] **ControlSocket** __Path__::
     Like ControlPort, but listens on a Unix domain socket, rather than a TCP
-    socket. '0' disables ControlSocket (Unix and Unix-like systems only.)
+    socket. '0' disables ControlSocket. (Unix and Unix-like systems only.)
+    (Default: 0)
 
 [[ControlSocketsGroupWritable]] **ControlSocketsGroupWritable** **0**|**1**::
     If this option is set to 0, don't allow the filesystem group to read and
@@ -786,17 +789,15 @@ GENERAL OPTIONS
     This is useful when running on flash memory or other media that support
     only a limited number of writes. (Default: 0)
 
-[[CircuitPriorityHalflife]] **CircuitPriorityHalflife** __NUM1__::
+[[CircuitPriorityHalflife]] **CircuitPriorityHalflife** __NUM__::
     If this value is set, we override the default algorithm for choosing which
-    circuit's cell to deliver or relay next. When the value is 0, we
-    round-robin between the active circuits on a connection, delivering one
-    cell from each in turn. When the value is positive, we prefer delivering
-    cells from whichever connection has the lowest weighted cell count, where
-    cells are weighted exponentially according to the supplied
-    CircuitPriorityHalflife value (in seconds). If this option is not set at
-    all, we use the behavior recommended in the current consensus
-    networkstatus. This is an advanced option; you generally shouldn't have
-    to mess with it. (Default: not set)
+    circuit's cell to deliver or relay next. It is delivered first to the
+    circuit that has the lowest weighted cell count, where cells are weighted
+    exponentially according to this value (in seconds). If the value is -1, it
+    is taken from the consensus if possible else it will fallback to the
+    default value of 30. Minimum: 1, Maximum: 2147483647. This can be defined
+    as a float value. This is an advanced option; you generally shouldn't have
+    to mess with it. (Default: -1)
 
 [[CountPrivateBandwidth]] **CountPrivateBandwidth** **0**|**1**::
     If this option is set, then Tor's rate-limiting applies not only to
@@ -813,10 +814,9 @@ GENERAL OPTIONS
 
 [[NoExec]] **NoExec** **0**|**1**::
     If this option is set to 1, then Tor will never launch another
-    executable, regardless of the settings of PortForwardingHelper,
-    ClientTransportPlugin, or ServerTransportPlugin.  Once this
-    option has been set to 1, it cannot be set back to 0 without
-    restarting Tor. (Default: 0)
+    executable, regardless of the settings of ClientTransportPlugin
+    or ServerTransportPlugin.  Once this option has been set to 1,
+    it cannot be set back to 0 without restarting Tor. (Default: 0)
 
 [[Schedulers]] **Schedulers** **KIST**|**KISTLite**|**Vanilla**::
     Specify the scheduler type that tor should use. The scheduler is
@@ -1294,9 +1294,11 @@ The following options are useful only fo
     2 minutes)
 
 [[TokenBucketRefillInterval]] **TokenBucketRefillInterval** __NUM__ [**msec**|**second**]::
-    Set the refill interval of Tor's token bucket to NUM milliseconds.
-    NUM must be between 1 and 1000, inclusive.  Note that the configured
-    bandwidth limits are still expressed in bytes per second: this
+    Set the refill delay interval of Tor's token bucket to NUM milliseconds.
+    NUM must be between 1 and 1000, inclusive.  When Tor is out of bandwidth,
+    on a connection or globally, it will wait up to this long before it tries
+    to use that connection again.
+    Note that bandwidth limits are still expressed in bytes per second: this
     option only affects the frequency with which Tor checks to see whether
     previously exhausted connections may read again.
     Can not be changed while tor is running. (Default: 100 msec)
@@ -1353,6 +1355,13 @@ The following options are useful only fo
     number from the guard-n-primary-guards-to-use consensus parameter, and
     default to 1 if the consensus parameter isn't set. (Default: 0)
 
+[[NumPrimaryGuards]] **NumPrimaryGuards** __NUM__::
+    If UseEntryGuards is set to 1, we will try to pick NUM routers for our
+    primary guard list, which is the set of routers we strongly prefer when
+    connecting to the Tor network. If NUM is 0, we try to learn the number from
+    the guard-n-primary-guards consensus parameter, and default to 3 if the
+    consensus parameter isn't set. (Default: 0)
+
 [[NumDirectoryGuards]] **NumDirectoryGuards** __NUM__::
     If UseEntryGuards is set to 1, we try to make sure we have at least NUM
     routers to use as directory guards. If this option is set to 0, use the
@@ -1406,7 +1415,7 @@ The following options are useful only fo
 
 [[HTTPTunnelPort]] **HTTPTunnelPort**  \['address':]__port__|**auto** [_isolation flags_]::
     Open this port to listen for proxy connections using the "HTTP CONNECT"
-    protocol instead of SOCKS. Set this to 0
+    protocol instead of SOCKS. Set this to
     0 if you don't want to allow "HTTP CONNECT" connections. Set the port
     to "auto" to have Tor pick a port for you. This directive can be
     specified multiple times to bind to multiple addresses/ports.  See
@@ -1446,7 +1455,7 @@ The following options are useful only fo
     Set this to "default", or leave it unconfigured, to use regular IPTables
     on Linux, or to use pf +rdr-to+ rules on *BSD systems. +
  +
-    (Default: "default".)
+    (Default: "default")
 
 [[NATDPort]] **NATDPort** \['address':]__port__|**auto** [_isolation flags_]::
     Open this port to listen for connections from old versions of ipfw (as
@@ -1583,6 +1592,14 @@ The following options are useful only fo
     which means that nodes specified in ExcludeNodes will not be
     picked.
  +
+    When either this option or HSLayer3Nodes are set, the /16 subnet
+    and node family restrictions are removed for hidden service
+    circuits. Additionally, we allow the guard node to be present
+    as the Rend, HSDir, and IP node, and as the hop before it. This
+    is done to prevent the adversary from inferring information
+    about our guard, layer2, and layer3 node choices at later points
+    in the path.
+ +
     This option is meant to be managed by a Tor controller such as
     https://github.com/mikeperry-tor/vanguards that selects and
     updates this set of nodes for you. Hence it does not do load
@@ -1628,6 +1645,14 @@ The following options are useful only fo
     ExcludeNodes have higher priority than HSLayer3Nodes,
     which means that nodes specified in ExcludeNodes will not be
     picked.
+ +
+    When either this option or HSLayer2Nodes are set, the /16 subnet
+    and node family restrictions are removed for hidden service
+    circuits. Additionally, we allow the guard node to be present
+    as the Rend, HSDir, and IP node, and as the hop before it. This
+    is done to prevent the adversary from inferring information
+    about our guard, layer2, and layer3 node choices at later points
+    in the path.
   +
     This option is meant to be managed by a Tor controller such as
     https://github.com/mikeperry-tor/vanguards that selects and
@@ -1738,34 +1763,31 @@ The following options are useful only fo
     prevent your Tor client from bootstrapping.  If this option is negative,
     Tor will use a default value chosen by the directory authorities. If the
     directory authorities do not choose a value, Tor will default to 0.6.
-    (Default: -1.)
+    (Default: -1)
 
-[[ClientBootstrapConsensusAuthorityDownloadSchedule]] **ClientBootstrapConsensusAuthorityDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download consensuses from authorities
+[[ClientBootstrapConsensusAuthorityDownloadInitialDelay]] **ClientBootstrapConsensusAuthorityDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download consensuses from authorities
     if they are bootstrapping (that is, they don't have a usable, reasonably
     live consensus). Only used by clients fetching from a list of fallback
     directory mirrors. This schedule is advanced by (potentially concurrent)
     connection attempts, unlike other schedules, which are advanced by
-    connection failures. (Default: 6, 11, 3600, 10800, 25200, 54000, 111600,
-    262800)
+    connection failures. (Default: 6)
 
-[[ClientBootstrapConsensusFallbackDownloadSchedule]] **ClientBootstrapConsensusFallbackDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download consensuses from fallback
+[[ClientBootstrapConsensusFallbackDownloadInitialDelay]] **ClientBootstrapConsensusFallbackDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download consensuses from fallback
     directory mirrors if they are bootstrapping (that is, they don't have a
     usable, reasonably live consensus). Only used by clients fetching from a
     list of fallback directory mirrors. This schedule is advanced by
     (potentially concurrent) connection attempts, unlike other schedules,
-    which are advanced by connection failures. (Default: 0, 1, 4, 11, 3600,
-    10800, 25200, 54000, 111600, 262800)
+    which are advanced by connection failures. (Default: 0)
 
-[[ClientBootstrapConsensusAuthorityOnlyDownloadSchedule]] **ClientBootstrapConsensusAuthorityOnlyDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download consensuses from authorities
+[[ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay]] **ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download consensuses from authorities
     if they are bootstrapping (that is, they don't have a usable, reasonably
     live consensus). Only used by clients which don't have or won't fetch
     from a list of fallback directory mirrors. This schedule is advanced by
     (potentially concurrent) connection attempts, unlike other schedules,
-    which are advanced by connection failures. (Default: 0, 3, 7, 3600,
-    10800, 25200, 54000, 111600, 262800)
+    which are advanced by connection failures. (Default: 0)
 
 [[ClientBootstrapConsensusMaxInProgressTries]] **ClientBootstrapConsensusMaxInProgressTries** __NUM__::
     Try this many simultaneous connections to download a consensus before
@@ -1896,7 +1918,7 @@ is non-zero):
     If you want to use a reduced exit policy rather than the default exit
     policy, set "ReducedExitPolicy 1". If you want to _replace_ the default
     exit policy with your custom exit policy, end your exit policy with either
-    a reject *:* or an accept *:*. Otherwise, you’re _augmenting_ (prepending
+    a reject *:* or an accept *:*. Otherwise, you're _augmenting_ (prepending
     to) the default or reduced exit policy. +
  +
     The default exit policy is:
@@ -2059,6 +2081,8 @@ is non-zero):
 [[Nickname]] **Nickname** __name__::
     Set the server's nickname to \'name'. Nicknames must be between 1 and 19
     characters inclusive, and must contain only the characters [a-zA-Z0-9].
+    If not set, **Unnamed** will be used. Relays can always be uniquely identified
+    by their identity fingerprints.
 
 [[NumCPUs]] **NumCPUs** __num__::
     How many processes to use at once for decrypting onionskins and other
@@ -2094,18 +2118,6 @@ is non-zero):
     For obvious reasons, NoAdvertise and NoListen are mutually exclusive, and
     IPv4Only and IPv6Only are mutually exclusive.
 
-[[PortForwarding]] **PortForwarding** **0**|**1**::
-    Attempt to automatically forward the DirPort and ORPort on a NAT router
-    connecting this Tor server to the Internet. If set, Tor will try both
-    NAT-PMP (common on Apple routers) and UPnP (common on routers from other
-    manufacturers). (Default: 0)
-
-[[PortForwardingHelper]] **PortForwardingHelper** __filename__|__pathname__::
-    If PortForwarding is set, use this executable to configure the forwarding.
-    If set to a filename, the system path will be searched for the executable.
-    If set to a path, only the specified path will be executed.
-    (Default: tor-fw-helper)
-
 [[PublishServerDescriptor]] **PublishServerDescriptor** **0**|**1**|**v3**|**bridge**,**...**::
     This option specifies which descriptors Tor will publish when acting as
     a relay. You can
@@ -2269,7 +2281,8 @@ is non-zero):
     sent and received by this relay, in addition to total cell counts.
     These statistics are rounded, and omitted if traffic is low. This
     information is important for load balancing decisions related to padding.
-    (Default: 1)
+    If ExtraInfoStatistics is enabled, it will be published
+    as a part of extra-info document. (Default: 1)
 
 [[DirReqStatistics]] **DirReqStatistics** **0**|**1**::
     Relays and bridges only.
@@ -2368,6 +2381,11 @@ is non-zero):
     KeywDirectory. If the option is set to 1, make the KeyDirectory readable
     by the default GID. (Default: 0)
 
+[[RephistTrackTime]] **RephistTrackTime** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
+    Tells an authority, or other node tracking node reliability and history,
+    that fine-grained information about nodes can be discarded when it hasn't
+    changed for a given amount of time.  (Default: 24 hours)
+
 
 DIRECTORY SERVER OPTIONS
 ------------------------
@@ -2737,11 +2755,6 @@ on the public Tor network.
     different identity.  This feature is used to migrate directory authority
     keys in the event of a compromise.  (Default: 0)
 
-[[RephistTrackTime]] **RephistTrackTime** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**::
-    Tells an authority, or other node tracking node reliability and history,
-    that fine-grained information about nodes can be discarded when it hasn't
-    changed for a given amount of time.  (Default: 24 hours)
-
 [[AuthDirHasIPv6Connectivity]] **AuthDirHasIPv6Connectivity** **0**|**1**::
     Authoritative directories only. When set to 0, OR ports with an
     IPv6 address are not included in the authority's votes. When set to 1,
@@ -2909,12 +2922,9 @@ The following options are used for runni
        AssumeReachable 1
        AuthDirMaxServersPerAddr 0
        AuthDirMaxServersPerAuthAddr 0
-       ClientBootstrapConsensusAuthorityDownloadSchedule 0, 2,
-          4 (for 40 seconds), 8, 16, 32, 60
-       ClientBootstrapConsensusFallbackDownloadSchedule 0, 1,
-          4 (for 40 seconds), 8, 16, 32, 60
-       ClientBootstrapConsensusAuthorityOnlyDownloadSchedule 0, 1,
-          4 (for 40 seconds), 8, 16, 32, 60
+       ClientBootstrapConsensusAuthorityDownloadInitialDelay 0
+       ClientBootstrapConsensusFallbackDownloadInitialDelay 0
+       ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay 0
        ClientDNSRejectInternalAddresses 0
        ClientRejectInternalAddresses 0
        CountPrivateBandwidth 1
@@ -2929,17 +2939,16 @@ The following options are used for runni
        TestingV3AuthInitialDistDelay 20 seconds
        TestingAuthDirTimeToLearnReachability 0 minutes
        TestingEstimatedDescriptorPropagationTime 0 minutes
-       TestingServerDownloadSchedule 0, 0, 0, 5, 10, 15, 20, 30, 60
-       TestingClientDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-       TestingServerConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-       TestingClientConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-       TestingBridgeDownloadSchedule 10, 30, 60
-       TestingBridgeBootstrapDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+       TestingServerDownloadInitialDelay 0
+       TestingClientDownloadInitialDelay 0
+       TestingServerConsensusDownloadInitialDelay 0
+       TestingClientConsensusDownloadInitialDelay 0
+       TestingBridgeDownloadInitialDelay 10
+       TestingBridgeBootstrapDownloadInitialDelay 0
        TestingClientMaxIntervalWithoutRequest 5 seconds
        TestingDirConnectionMaxStall 30 seconds
        TestingEnableConnBwEvent 1
        TestingEnableCellStatsEvent 1
-       TestingEnableTbEmptyEvent 1
 
 [[TestingV3AuthInitialVotingInterval]] **TestingV3AuthInitialVotingInterval** __N__ **minutes**|**hours**::
     Like V3AuthVotingInterval, but for initial voting interval before the first
@@ -2974,37 +2983,31 @@ The following options are used for runni
     Minimum value for the Fast flag.  Overrides the ordinary minimum taken
     from the consensus when TestingTorNetwork is set. (Default: 0.)
 
-[[TestingServerDownloadSchedule]] **TestingServerDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when servers should download things in general. Changing this
-    requires that **TestingTorNetwork** is set. (Default: 0, 0, 0, 60, 60, 120,
-    300, 900, 2147483647)
-
-[[TestingClientDownloadSchedule]] **TestingClientDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download things in general. Changing this
-    requires that **TestingTorNetwork** is set. (Default: 0, 0, 60, 300, 600,
-    2147483647)
-
-[[TestingServerConsensusDownloadSchedule]] **TestingServerConsensusDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when servers should download consensuses. Changing this
-    requires that **TestingTorNetwork** is set. (Default: 0, 0, 60, 300, 600,
-    1800, 1800, 1800, 1800, 1800, 3600, 7200)
-
-[[TestingClientConsensusDownloadSchedule]] **TestingClientConsensusDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download consensuses. Changing this
-    requires that **TestingTorNetwork** is set. (Default: 0, 0, 60, 300, 600,
-    1800, 3600, 3600, 3600, 10800, 21600, 43200)
+[[TestingServerDownloadInitialDelay]] **TestingServerDownloadInitialDelay** __N__::
+    Initial delay in seconds for when servers should download things in general. Changing this
+    requires that **TestingTorNetwork** is set. (Default: 0)
+
+[[TestingClientDownloadInitialDelay]] **TestingClientDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download things in general. Changing this
+    requires that **TestingTorNetwork** is set. (Default: 0)
+
+[[TestingServerConsensusDownloadInitialDelay]] **TestingServerConsensusDownloadInitialDelay** __N__::
+    Initial delay in seconds for when servers should download consensuses. Changing this
+    requires that **TestingTorNetwork** is set. (Default: 0)
+
+[[TestingClientConsensusDownloadInitialDelay]] **TestingClientConsensusDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download consensuses. Changing this
+    requires that **TestingTorNetwork** is set. (Default: 0)
 
-[[TestingBridgeDownloadSchedule]] **TestingBridgeDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download each bridge descriptor when they
+[[TestingBridgeDownloadInitialDelay]] **TestingBridgeDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download each bridge descriptor when they
     know that one or more of their configured bridges are running. Changing
-    this requires that **TestingTorNetwork** is set. (Default: 10800, 25200,
-    54000, 111600, 262800)
+    this requires that **TestingTorNetwork** is set. (Default: 10800)
 
-[[TestingBridgeBootstrapDownloadSchedule]] **TestingBridgeBootstrapDownloadSchedule** __N__,__N__,__...__::
-    Schedule for when clients should download each bridge descriptor when they
+[[TestingBridgeBootstrapDownloadInitialDelay]] **TestingBridgeBootstrapDownloadInitialDelay** __N__::
+    Initial delay in seconds for when clients should download each bridge descriptor when they
     have just started, or when they can not contact any of their bridges.
-    Changing this requires that **TestingTorNetwork** is set. (Default: 0, 30,
-    90, 600, 3600, 10800, 25200, 54000, 111600, 262800)
+    Changing this requires that **TestingTorNetwork** is set. (Default: 0)
 
 [[TestingClientMaxIntervalWithoutRequest]] **TestingClientMaxIntervalWithoutRequest** __N__ **seconds**|**minutes**::
     When directory clients have only a few descriptors to request, they batch
@@ -3077,11 +3080,6 @@ The following options are used for runni
     events.  Changing this requires that **TestingTorNetwork** is set.
     (Default: 0)
 
-[[TestingEnableTbEmptyEvent]] **TestingEnableTbEmptyEvent** **0**|**1**::
-    If this option is set, then Tor controllers may register for TB_EMPTY
-    events.  Changing this requires that **TestingTorNetwork** is set.
-    (Default: 0)
-
 [[TestingMinExitFlagThreshold]] **TestingMinExitFlagThreshold**  __N__ **KBytes**|**MBytes**|**GBytes**|**TBytes**|**KBits**|**MBits**|**GBits**|**TBits**::
     Sets a lower-bound for assigning an exit flag when running as an
     authority on a testing network. Overrides the usual default lower bound
diff -pruN 0.3.3.9-1/doc/tor-gencert.1.in 0.3.4.8-1/doc/tor-gencert.1.in
--- 0.3.3.9-1/doc/tor-gencert.1.in	2018-01-19 07:28:49.000000000 +0000
+++ 0.3.4.8-1/doc/tor-gencert.1.in	2018-06-25 18:12:28.000000000 +0000
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: tor-gencert
 .\"    Author: Nick Mathewson
-.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\"      Date: 01/19/2018
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\"      Date: 06/25/2018
 .\"    Manual: Tor Manual
 .\"    Source: Tor
 .\"  Language: English
 .\"
-.TH "TOR\-GENCERT" "1" "01/19/2018" "Tor" "Tor Manual"
+.TH "TOR\-GENCERT" "1" "06/25/2018" "Tor" "Tor Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
diff -pruN 0.3.3.9-1/doc/tor-gencert.html.in 0.3.4.8-1/doc/tor-gencert.html.in
--- 0.3.3.9-1/doc/tor-gencert.html.in	2018-01-19 07:28:50.000000000 +0000
+++ 0.3.4.8-1/doc/tor-gencert.html.in	2018-06-25 18:12:24.000000000 +0000
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
-<meta name="generator" content="AsciiDoc 8.6.9" />
+<meta name="generator" content="AsciiDoc 8.6.8" />
 <title>tor-gencert(1)</title>
 <style type="text/css">
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
@@ -94,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;
   margin: 0;
 }
-pre {
-  white-space: pre-wrap;
-}
+
 
 #author {
   color: #527bbd;
@@ -225,7 +223,7 @@ div.exampleblock > div.content {
 }
 
 div.imageblock div.content { padding-left: 0; }
-span.image img { border-style: none; vertical-align: text-bottom; }
+span.image img { border-style: none; }
 a.image:visited { color: white; }
 
 dl {
@@ -892,8 +890,7 @@ really want authorities to be running on
 <div id="footnotes"><hr /></div>
 <div id="footer">
 <div id="footer-text">
-Last updated
- 2018-01-19 07:27:42 UTC
+Last updated 2018-06-15 21:20:53 UTC
 </div>
 </div>
 </body>
diff -pruN 0.3.3.9-1/doc/tor.html.in 0.3.4.8-1/doc/tor.html.in
--- 0.3.3.9-1/doc/tor.html.in	2018-07-13 18:26:31.000000000 +0000
+++ 0.3.4.8-1/doc/tor.html.in	2018-06-25 18:12:24.000000000 +0000
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
-<meta name="generator" content="AsciiDoc 8.6.9" />
+<meta name="generator" content="AsciiDoc 8.6.8" />
 <title>TOR(1)</title>
 <style type="text/css">
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
@@ -94,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;
   margin: 0;
 }
-pre {
-  white-space: pre-wrap;
-}
+
 
 #author {
   color: #527bbd;
@@ -225,7 +223,7 @@ div.exampleblock > div.content {
 }
 
 div.imageblock div.content { padding-left: 0; }
-span.image img { border-style: none; vertical-align: text-bottom; }
+span.image img { border-style: none; }
 a.image:visited { color: white; }
 
 dl {
@@ -1217,7 +1215,9 @@ forward slash (/) in the configuration f
     other than controller connections, and we close (and don&#8217;t reattempt)
     any outbound
     connections.  Controllers sometimes use this option to avoid using
-    the network until Tor is fully configured. (Default: 0)
+    the network until Tor is fully configured.  Tor will make still certain
+    network-related calls (like DNS lookups) as a part of its configuration
+    process, even if DisableNetwork is set. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -1312,7 +1312,8 @@ forward slash (/) in the configuration f
 <dd>
 <p>
     Like ControlPort, but listens on a Unix domain socket, rather than a TCP
-    socket. <em>0</em> disables ControlSocket (Unix and Unix-like systems only.)
+    socket. <em>0</em> disables ControlSocket. (Unix and Unix-like systems only.)
+    (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -2012,20 +2013,18 @@ forward slash (/) in the configuration f
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="CircuitPriorityHalflife"></a> <strong>CircuitPriorityHalflife</strong> <em>NUM1</em>
+<a id="CircuitPriorityHalflife"></a> <strong>CircuitPriorityHalflife</strong> <em>NUM</em>
 </dt>
 <dd>
 <p>
     If this value is set, we override the default algorithm for choosing which
-    circuit&#8217;s cell to deliver or relay next. When the value is 0, we
-    round-robin between the active circuits on a connection, delivering one
-    cell from each in turn. When the value is positive, we prefer delivering
-    cells from whichever connection has the lowest weighted cell count, where
-    cells are weighted exponentially according to the supplied
-    CircuitPriorityHalflife value (in seconds). If this option is not set at
-    all, we use the behavior recommended in the current consensus
-    networkstatus. This is an advanced option; you generally shouldn&#8217;t have
-    to mess with it. (Default: not set)
+    circuit&#8217;s cell to deliver or relay next. It is delivered first to the
+    circuit that has the lowest weighted cell count, where cells are weighted
+    exponentially according to this value (in seconds). If the value is -1, it
+    is taken from the consensus if possible else it will fallback to the
+    default value of 30. Minimum: 1, Maximum: 2147483647. This can be defined
+    as a float value. This is an advanced option; you generally shouldn&#8217;t have
+    to mess with it. (Default: -1)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -2057,10 +2056,9 @@ forward slash (/) in the configuration f
 <dd>
 <p>
     If this option is set to 1, then Tor will never launch another
-    executable, regardless of the settings of PortForwardingHelper,
-    ClientTransportPlugin, or ServerTransportPlugin.  Once this
-    option has been set to 1, it cannot be set back to 0 without
-    restarting Tor. (Default: 0)
+    executable, regardless of the settings of ClientTransportPlugin
+    or ServerTransportPlugin.  Once this option has been set to 1,
+    it cannot be set back to 0 without restarting Tor. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -2883,9 +2881,11 @@ Using a wildcard to match only part of a
 </dt>
 <dd>
 <p>
-    Set the refill interval of Tor&#8217;s token bucket to NUM milliseconds.
-    NUM must be between 1 and 1000, inclusive.  Note that the configured
-    bandwidth limits are still expressed in bytes per second: this
+    Set the refill delay interval of Tor&#8217;s token bucket to NUM milliseconds.
+    NUM must be between 1 and 1000, inclusive.  When Tor is out of bandwidth,
+    on a connection or globally, it will wait up to this long before it tries
+    to use that connection again.
+    Note that bandwidth limits are still expressed in bytes per second: this
     option only affects the frequency with which Tor checks to see whether
     previously exhausted connections may read again.
     Can not be changed while tor is running. (Default: 100 msec)
@@ -2984,6 +2984,18 @@ Using a wildcard to match only part of a
 </p>
 </dd>
 <dt class="hdlist1">
+<a id="NumPrimaryGuards"></a> <strong>NumPrimaryGuards</strong> <em>NUM</em>
+</dt>
+<dd>
+<p>
+    If UseEntryGuards is set to 1, we will try to pick NUM routers for our
+    primary guard list, which is the set of routers we strongly prefer when
+    connecting to the Tor network. If NUM is 0, we try to learn the number from
+    the guard-n-primary-guards consensus parameter, and default to 3 if the
+    consensus parameter isn&#8217;t set. (Default: 0)
+</p>
+</dd>
+<dt class="hdlist1">
 <a id="NumDirectoryGuards"></a> <strong>NumDirectoryGuards</strong> <em>NUM</em>
 </dt>
 <dd>
@@ -3077,7 +3089,7 @@ is preferable since it reduces the chanc
 <dd>
 <p>
     Open this port to listen for proxy connections using the "HTTP CONNECT"
-    protocol instead of SOCKS. Set this to 0
+    protocol instead of SOCKS. Set this to
     0 if you don&#8217;t want to allow "HTTP CONNECT" connections. Set the port
     to "auto" to have Tor pick a port for you. This directive can be
     specified multiple times to bind to multiple addresses/ports.  See
@@ -3127,7 +3139,7 @@ is preferable since it reduces the chanc
     Set this to "default", or leave it unconfigured, to use regular IPTables
     on Linux, or to use pf <code>rdr-to</code> rules on *BSD systems.<br />
 <br />
-    (Default: "default".)
+    (Default: "default")
 </p>
 </dd>
 <dt class="hdlist1">
@@ -3329,6 +3341,14 @@ is preferable since it reduces the chanc
     which means that nodes specified in ExcludeNodes will not be
     picked.
 <br />
+    When either this option or HSLayer3Nodes are set, the /16 subnet
+    and node family restrictions are removed for hidden service
+    circuits. Additionally, we allow the guard node to be present
+    as the Rend, HSDir, and IP node, and as the hop before it. This
+    is done to prevent the adversary from inferring information
+    about our guard, layer2, and layer3 node choices at later points
+    in the path.
+<br />
     This option is meant to be managed by a Tor controller such as
     <a href="https://github.com/mikeperry-tor/vanguards">https://github.com/mikeperry-tor/vanguards</a> that selects and
     updates this set of nodes for you. Hence it does not do load
@@ -3379,6 +3399,14 @@ is preferable since it reduces the chanc
     ExcludeNodes have higher priority than HSLayer3Nodes,
     which means that nodes specified in ExcludeNodes will not be
     picked.
+<br />
+    When either this option or HSLayer2Nodes are set, the /16 subnet
+    and node family restrictions are removed for hidden service
+    circuits. Additionally, we allow the guard node to be present
+    as the Rend, HSDir, and IP node, and as the hop before it. This
+    is done to prevent the adversary from inferring information
+    about our guard, layer2, and layer3 node choices at later points
+    in the path.
  <br />
     This option is meant to be managed by a Tor controller such as
     <a href="https://github.com/mikeperry-tor/vanguards">https://github.com/mikeperry-tor/vanguards</a> that selects and
@@ -3525,49 +3553,46 @@ is preferable since it reduces the chanc
     prevent your Tor client from bootstrapping.  If this option is negative,
     Tor will use a default value chosen by the directory authorities. If the
     directory authorities do not choose a value, Tor will default to 0.6.
-    (Default: -1.)
+    (Default: -1)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="ClientBootstrapConsensusAuthorityDownloadSchedule"></a> <strong>ClientBootstrapConsensusAuthorityDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="ClientBootstrapConsensusAuthorityDownloadInitialDelay"></a> <strong>ClientBootstrapConsensusAuthorityDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download consensuses from authorities
+    Initial delay in seconds for when clients should download consensuses from authorities
     if they are bootstrapping (that is, they don&#8217;t have a usable, reasonably
     live consensus). Only used by clients fetching from a list of fallback
     directory mirrors. This schedule is advanced by (potentially concurrent)
     connection attempts, unlike other schedules, which are advanced by
-    connection failures. (Default: 6, 11, 3600, 10800, 25200, 54000, 111600,
-    262800)
+    connection failures. (Default: 6)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="ClientBootstrapConsensusFallbackDownloadSchedule"></a> <strong>ClientBootstrapConsensusFallbackDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="ClientBootstrapConsensusFallbackDownloadInitialDelay"></a> <strong>ClientBootstrapConsensusFallbackDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download consensuses from fallback
+    Initial delay in seconds for when clients should download consensuses from fallback
     directory mirrors if they are bootstrapping (that is, they don&#8217;t have a
     usable, reasonably live consensus). Only used by clients fetching from a
     list of fallback directory mirrors. This schedule is advanced by
     (potentially concurrent) connection attempts, unlike other schedules,
-    which are advanced by connection failures. (Default: 0, 1, 4, 11, 3600,
-    10800, 25200, 54000, 111600, 262800)
+    which are advanced by connection failures. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="ClientBootstrapConsensusAuthorityOnlyDownloadSchedule"></a> <strong>ClientBootstrapConsensusAuthorityOnlyDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay"></a> <strong>ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download consensuses from authorities
+    Initial delay in seconds for when clients should download consensuses from authorities
     if they are bootstrapping (that is, they don&#8217;t have a usable, reasonably
     live consensus). Only used by clients which don&#8217;t have or won&#8217;t fetch
     from a list of fallback directory mirrors. This schedule is advanced by
     (potentially concurrent) connection attempts, unlike other schedules,
-    which are advanced by connection failures. (Default: 0, 3, 7, 3600,
-    10800, 25200, 54000, 111600, 262800)
+    which are advanced by connection failures. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -3740,7 +3765,7 @@ is non-zero):</p></div>
     If you want to use a reduced exit policy rather than the default exit
     policy, set "ReducedExitPolicy 1". If you want to <em>replace</em> the default
     exit policy with your custom exit policy, end your exit policy with either
-    a reject <strong>:</strong> or an accept <strong>:</strong>. Otherwise, you’re <em>augmenting</em> (prepending
+    a reject <strong>:</strong> or an accept <strong>:</strong>. Otherwise, you&#8217;re <em>augmenting</em> (prepending
     to) the default or reduced exit policy.<br />
 <br />
     The default exit policy is:
@@ -3950,6 +3975,8 @@ reject *:*</code></pre>
 <p>
     Set the server&#8217;s nickname to 'name'. Nicknames must be between 1 and 19
     characters inclusive, and must contain only the characters [a-zA-Z0-9].
+    If not set, <strong>Unnamed</strong> will be used. Relays can always be uniquely identified
+    by their identity fingerprints.
 </p>
 </dd>
 <dt class="hdlist1">
@@ -4029,28 +4056,6 @@ reject *:*</code></pre>
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="PortForwarding"></a> <strong>PortForwarding</strong> <strong>0</strong>|<strong>1</strong>
-</dt>
-<dd>
-<p>
-    Attempt to automatically forward the DirPort and ORPort on a NAT router
-    connecting this Tor server to the Internet. If set, Tor will try both
-    NAT-PMP (common on Apple routers) and UPnP (common on routers from other
-    manufacturers). (Default: 0)
-</p>
-</dd>
-<dt class="hdlist1">
-<a id="PortForwardingHelper"></a> <strong>PortForwardingHelper</strong> <em>filename</em>|<em>pathname</em>
-</dt>
-<dd>
-<p>
-    If PortForwarding is set, use this executable to configure the forwarding.
-    If set to a filename, the system path will be searched for the executable.
-    If set to a path, only the specified path will be executed.
-    (Default: tor-fw-helper)
-</p>
-</dd>
-<dt class="hdlist1">
 <a id="PublishServerDescriptor"></a> <strong>PublishServerDescriptor</strong> <strong>0</strong>|<strong>1</strong>|<strong>v3</strong>|<strong>bridge</strong>,<strong>&#8230;</strong>
 </dt>
 <dd>
@@ -4317,7 +4322,8 @@ reject *:*</code></pre>
     sent and received by this relay, in addition to total cell counts.
     These statistics are rounded, and omitted if traffic is low. This
     information is important for load balancing decisions related to padding.
-    (Default: 1)
+    If ExtraInfoStatistics is enabled, it will be published
+    as a part of extra-info document. (Default: 1)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -4482,6 +4488,16 @@ reject *:*</code></pre>
     by the default GID. (Default: 0)
 </p>
 </dd>
+<dt class="hdlist1">
+<a id="RephistTrackTime"></a> <strong>RephistTrackTime</strong> <em>N</em> <strong>seconds</strong>|<strong>minutes</strong>|<strong>hours</strong>|<strong>days</strong>|<strong>weeks</strong>
+</dt>
+<dd>
+<p>
+    Tells an authority, or other node tracking node reliability and history,
+    that fine-grained information about nodes can be discarded when it hasn&#8217;t
+    changed for a given amount of time.  (Default: 24 hours)
+</p>
+</dd>
 </dl></div>
 </div>
 </div>
@@ -5079,16 +5095,6 @@ on the public Tor network.</p></div>
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="RephistTrackTime"></a> <strong>RephistTrackTime</strong> <em>N</em> <strong>seconds</strong>|<strong>minutes</strong>|<strong>hours</strong>|<strong>days</strong>|<strong>weeks</strong>
-</dt>
-<dd>
-<p>
-    Tells an authority, or other node tracking node reliability and history,
-    that fine-grained information about nodes can be discarded when it hasn&#8217;t
-    changed for a given amount of time.  (Default: 24 hours)
-</p>
-</dd>
-<dt class="hdlist1">
 <a id="AuthDirHasIPv6Connectivity"></a> <strong>AuthDirHasIPv6Connectivity</strong> <strong>0</strong>|<strong>1</strong>
 </dt>
 <dd>
@@ -5350,12 +5356,9 @@ EnforceDistinctSubnets 0
 AssumeReachable 1
 AuthDirMaxServersPerAddr 0
 AuthDirMaxServersPerAuthAddr 0
-ClientBootstrapConsensusAuthorityDownloadSchedule 0, 2,
-   4 (for 40 seconds), 8, 16, 32, 60
-ClientBootstrapConsensusFallbackDownloadSchedule 0, 1,
-   4 (for 40 seconds), 8, 16, 32, 60
-ClientBootstrapConsensusAuthorityOnlyDownloadSchedule 0, 1,
-   4 (for 40 seconds), 8, 16, 32, 60
+ClientBootstrapConsensusAuthorityDownloadInitialDelay 0
+ClientBootstrapConsensusFallbackDownloadInitialDelay 0
+ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay 0
 ClientDNSRejectInternalAddresses 0
 ClientRejectInternalAddresses 0
 CountPrivateBandwidth 1
@@ -5370,17 +5373,16 @@ TestingV3AuthInitialVoteDelay 20 seconds
 TestingV3AuthInitialDistDelay 20 seconds
 TestingAuthDirTimeToLearnReachability 0 minutes
 TestingEstimatedDescriptorPropagationTime 0 minutes
-TestingServerDownloadSchedule 0, 0, 0, 5, 10, 15, 20, 30, 60
-TestingClientDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-TestingServerConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-TestingClientConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
-TestingBridgeDownloadSchedule 10, 30, 60
-TestingBridgeBootstrapDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+TestingServerDownloadInitialDelay 0
+TestingClientDownloadInitialDelay 0
+TestingServerConsensusDownloadInitialDelay 0
+TestingClientConsensusDownloadInitialDelay 0
+TestingBridgeDownloadInitialDelay 10
+TestingBridgeBootstrapDownloadInitialDelay 0
 TestingClientMaxIntervalWithoutRequest 5 seconds
 TestingDirConnectionMaxStall 30 seconds
 TestingEnableConnBwEvent 1
-TestingEnableCellStatsEvent 1
-TestingEnableTbEmptyEvent 1</code></pre>
+TestingEnableCellStatsEvent 1</code></pre>
 </div></div>
 </dd>
 <dt class="hdlist1">
@@ -5452,65 +5454,59 @@ TestingEnableTbEmptyEvent 1</code></pre>
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingServerDownloadSchedule"></a> <strong>TestingServerDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="TestingServerDownloadInitialDelay"></a> <strong>TestingServerDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when servers should download things in general. Changing this
-    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0, 0, 0, 60, 60, 120,
-    300, 900, 2147483647)
+    Initial delay in seconds for when servers should download things in general. Changing this
+    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingClientDownloadSchedule"></a> <strong>TestingClientDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="TestingClientDownloadInitialDelay"></a> <strong>TestingClientDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download things in general. Changing this
-    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0, 0, 60, 300, 600,
-    2147483647)
+    Initial delay in seconds for when clients should download things in general. Changing this
+    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingServerConsensusDownloadSchedule"></a> <strong>TestingServerConsensusDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="TestingServerConsensusDownloadInitialDelay"></a> <strong>TestingServerConsensusDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when servers should download consensuses. Changing this
-    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0, 0, 60, 300, 600,
-    1800, 1800, 1800, 1800, 1800, 3600, 7200)
+    Initial delay in seconds for when servers should download consensuses. Changing this
+    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingClientConsensusDownloadSchedule"></a> <strong>TestingClientConsensusDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="TestingClientConsensusDownloadInitialDelay"></a> <strong>TestingClientConsensusDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download consensuses. Changing this
-    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0, 0, 60, 300, 600,
-    1800, 3600, 3600, 3600, 10800, 21600, 43200)
+    Initial delay in seconds for when clients should download consensuses. Changing this
+    requires that <strong>TestingTorNetwork</strong> is set. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingBridgeDownloadSchedule"></a> <strong>TestingBridgeDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="TestingBridgeDownloadInitialDelay"></a> <strong>TestingBridgeDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download each bridge descriptor when they
+    Initial delay in seconds for when clients should download each bridge descriptor when they
     know that one or more of their configured bridges are running. Changing
-    this requires that <strong>TestingTorNetwork</strong> is set. (Default: 10800, 25200,
-    54000, 111600, 262800)
+    this requires that <strong>TestingTorNetwork</strong> is set. (Default: 10800)
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingBridgeBootstrapDownloadSchedule"></a> <strong>TestingBridgeBootstrapDownloadSchedule</strong> <em>N</em>,<em>N</em>,<em>&#8230;</em>
+<a id="TestingBridgeBootstrapDownloadInitialDelay"></a> <strong>TestingBridgeBootstrapDownloadInitialDelay</strong> <em>N</em>
 </dt>
 <dd>
 <p>
-    Schedule for when clients should download each bridge descriptor when they
+    Initial delay in seconds for when clients should download each bridge descriptor when they
     have just started, or when they can not contact any of their bridges.
-    Changing this requires that <strong>TestingTorNetwork</strong> is set. (Default: 0, 30,
-    90, 600, 3600, 10800, 25200, 54000, 111600, 262800)
+    Changing this requires that <strong>TestingTorNetwork</strong> is set. (Default: 0)
 </p>
 </dd>
 <dt class="hdlist1">
@@ -5635,16 +5631,6 @@ TestingEnableTbEmptyEvent 1</code></pre>
 </p>
 </dd>
 <dt class="hdlist1">
-<a id="TestingEnableTbEmptyEvent"></a> <strong>TestingEnableTbEmptyEvent</strong> <strong>0</strong>|<strong>1</strong>
-</dt>
-<dd>
-<p>
-    If this option is set, then Tor controllers may register for TB_EMPTY
-    events.  Changing this requires that <strong>TestingTorNetwork</strong> is set.
-    (Default: 0)
-</p>
-</dd>
-<dt class="hdlist1">
 <a id="TestingMinExitFlagThreshold"></a> <strong>TestingMinExitFlagThreshold</strong>  <em>N</em> <strong>KBytes</strong>|<strong>MBytes</strong>|<strong>GBytes</strong>|<strong>TBytes</strong>|<strong>KBits</strong>|<strong>MBits</strong>|<strong>GBits</strong>|<strong>TBits</strong>
 </dt>
 <dd>
@@ -6327,8 +6313,7 @@ A short history of bandwidth usage, as p
 <div id="footnotes"><hr /></div>
 <div id="footer">
 <div id="footer-text">
-Last updated
- 2018-07-13 18:25:23 UTC
+Last updated 2018-06-15 21:20:53 UTC
 </div>
 </div>
 </body>
diff -pruN 0.3.3.9-1/doc/torify.1.in 0.3.4.8-1/doc/torify.1.in
--- 0.3.3.9-1/doc/torify.1.in	2018-07-13 18:20:07.000000000 +0000
+++ 0.3.4.8-1/doc/torify.1.in	2018-06-25 18:12:29.000000000 +0000
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: torify
 .\"    Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\"      Date: 07/13/2018
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\"      Date: 06/25/2018
 .\"    Manual: Tor Manual
 .\"    Source: Tor
 .\"  Language: English
 .\"
-.TH "TORIFY" "1" "07/13/2018" "Tor" "Tor Manual"
+.TH "TORIFY" "1" "06/25/2018" "Tor" "Tor Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
diff -pruN 0.3.3.9-1/doc/torify.html.in 0.3.4.8-1/doc/torify.html.in
--- 0.3.3.9-1/doc/torify.html.in	2018-07-13 18:20:09.000000000 +0000
+++ 0.3.4.8-1/doc/torify.html.in	2018-06-25 18:12:25.000000000 +0000
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
-<meta name="generator" content="AsciiDoc 8.6.9" />
+<meta name="generator" content="AsciiDoc 8.6.8" />
 <title>torify(1)</title>
 <style type="text/css">
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
@@ -94,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;
   margin: 0;
 }
-pre {
-  white-space: pre-wrap;
-}
+
 
 #author {
   color: #527bbd;
@@ -225,7 +223,7 @@ div.exampleblock > div.content {
 }
 
 div.imageblock div.content { padding-left: 0; }
-span.image img { border-style: none; vertical-align: text-bottom; }
+span.image img { border-style: none; }
 a.image:visited { color: white; }
 
 dl {
@@ -783,8 +781,7 @@ different circuits.</p></div>
 <div id="footnotes"><hr /></div>
 <div id="footer">
 <div id="footer-text">
-Last updated
- 2018-07-13 18:17:34 UTC
+Last updated 2018-06-15 21:20:53 UTC
 </div>
 </div>
 </body>
diff -pruN 0.3.3.9-1/doc/tor-resolve.1.in 0.3.4.8-1/doc/tor-resolve.1.in
--- 0.3.3.9-1/doc/tor-resolve.1.in	2018-01-19 07:28:49.000000000 +0000
+++ 0.3.4.8-1/doc/tor-resolve.1.in	2018-06-25 18:12:28.000000000 +0000
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: tor-resolve
 .\"    Author: Peter Palfrader
-.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\"      Date: 01/19/2018
+.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
+.\"      Date: 06/25/2018
 .\"    Manual: Tor Manual
 .\"    Source: Tor
 .\"  Language: English
 .\"
-.TH "TOR\-RESOLVE" "1" "01/19/2018" "Tor" "Tor Manual"
+.TH "TOR\-RESOLVE" "1" "06/25/2018" "Tor" "Tor Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
diff -pruN 0.3.3.9-1/doc/tor-resolve.html.in 0.3.4.8-1/doc/tor-resolve.html.in
--- 0.3.3.9-1/doc/tor-resolve.html.in	2018-01-19 07:28:50.000000000 +0000
+++ 0.3.4.8-1/doc/tor-resolve.html.in	2018-06-25 18:12:25.000000000 +0000
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
-<meta name="generator" content="AsciiDoc 8.6.9" />
+<meta name="generator" content="AsciiDoc 8.6.8" />
 <title>tor-resolve(1)</title>
 <style type="text/css">
 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
@@ -94,9 +94,7 @@ ul > li > * { color: black; }
   padding: 0;
   margin: 0;
 }
-pre {
-  white-space: pre-wrap;
-}
+
 
 #author {
   color: #527bbd;
@@ -225,7 +223,7 @@ div.exampleblock > div.content {
 }
 
 div.imageblock div.content { padding-left: 0; }
-span.image img { border-style: none; vertical-align: text-bottom; }
+span.image img { border-style: none; }
 a.image:visited { color: white; }
 
 dl {
@@ -825,8 +823,7 @@ port 9050.  If this isn&#8217;t what you
 <div id="footnotes"><hr /></div>
 <div id="footer">
 <div id="footer-text">
-Last updated
- 2018-01-19 07:27:42 UTC
+Last updated 2018-06-15 21:20:53 UTC
 </div>
 </div>
 </body>
diff -pruN 0.3.3.9-1/install-sh 0.3.4.8-1/install-sh
--- 0.3.3.9-1/install-sh	2018-07-12 17:16:59.000000000 +0000
+++ 0.3.4.8-1/install-sh	2018-06-25 18:12:07.000000000 +0000
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-11-20.07; # UTC
+scriptversion=2016-01-11.22; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='	'
 nl='
 '
-IFS=" ""	$nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@ mvprog=${MVPROG-mv}
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -97,7 +82,7 @@ dir_arg=
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@ while test $# -ne 0; do
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-	shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-	case $mode in
-	  *' '* | *'	'* | *'
-'*	  | *'*'* | *'?'* | *'['*)
-	    echo "$0: invalid mode: $mode" >&2
-	    exit 1;;
-	esac
-	shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-	shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-	# Protect names problematic for 'test' and other utilities.
-	case $dst_arg in
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
-	esac
-	shift;;
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
 
-    -T) no_target_directory=true;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)	shift
-	break;;
+    --) shift
+        break;;
 
-    -*)	echo "$0: invalid option: $1" >&2
-	exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -208,6 +204,15 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
   do_exit='(exit $ret); exit $ret'
   trap "ret=129; $do_exit" 1
   trap "ret=130; $do_exit" 2
@@ -223,16 +228,16 @@ if test -z "$dir_arg"; then
 
     *[0-7])
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -269,41 +274,15 @@ do
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dst_arg: Is a directory" >&2
-	exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
       dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-	(dirname "$dst") 2>/dev/null ||
-	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	     X"$dst" : 'X\(//\)[^/]' \| \
-	     X"$dst" : 'X\(//\)$' \| \
-	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-	echo X"$dst" |
-	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)[^/].*/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\).*/{
-		   s//\1/
-		   q
-		 }
-		 s/.*/./; q'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
@@ -314,81 +293,74 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-	# Create intermediate dirs using mode 755 as modified by the umask.
-	# This is like FreeBSD 'install' as of 1997-10-28.
-	umask=`umask`
-	case $stripcmd.$umask in
-	  # Optimize common cases.
-	  *[2367][2367]) mkdir_umask=$umask;;
-	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-	  *[0-7])
-	    mkdir_umask=`expr $umask + 22 \
-	      - $umask % 100 % 40 + $umask % 20 \
-	      - $umask % 10 % 4 + $umask % 2
-	    `;;
-	  *) mkdir_umask=$umask,go-w;;
-	esac
-
-	# With -d, create the new directory with the user-specified mode.
-	# Otherwise, rely on $mkdir_umask.
-	if test -n "$dir_arg"; then
-	  mkdir_mode=-m$mode
-	else
-	  mkdir_mode=
-	fi
-
-	posix_mkdir=false
-	case $umask in
-	  *[123567][0-7][0-7])
-	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
-	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-	    ;;
-	  *)
-            # $RANDOM is not portable (e.g. dash);  use it when possible to
-            # lower collision chance
-	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-	     # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
-	     # create the $tmpdir first (and fail if unsuccessful) to make sure
-	     # that nobody tries to guess the $tmpdir name.
-	    if (umask $mkdir_umask &&
-		$mkdirprog $mkdir_mode "$tmpdir" &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-	    then
-	      if test -z "$dir_arg" || {
-		   # Check for POSIX incompatibilities with -m.
-		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writable bit of parent directory when it shouldn't.
-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   test_tmpdir="$tmpdir/a"
-		   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-		   case $ls_ld_tmpdir in
-		     d????-?r-*) different_mode=700;;
-		     d????-?--*) different_mode=755;;
-		     *) false;;
-		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-		   }
-		 }
-	      then posix_mkdir=:
-	      fi
-	      rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
-	    else
-	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
-	    fi
-	    trap '' 0;;
-	esac;;
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            if (umask $mkdir_umask &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/d" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-	umask $mkdir_umask &&
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -398,53 +370,51 @@ do
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-	/*) prefix='/';;
-	[-=\(\)!]*) prefix='./';;
-	*)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-	test X"$d" = X && continue
+        test X"$d" = X && continue
 
-	prefix=$prefix$d
-	if test -d "$prefix"; then
-	  prefixes=
-	else
-	  if $posix_mkdir; then
-	    (umask=$mkdir_umask &&
-	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-	    # Don't fail if two instances are running concurrently.
-	    test -d "$prefix" || exit 1
-	  else
-	    case $prefix in
-	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-	      *) qprefix=$prefix;;
-	    esac
-	    prefixes="$prefixes '$qprefix'"
-	  fi
-	fi
-	prefix=$prefix/
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-	# Don't fail if two instances are running concurrently.
-	(umask $mkdir_umask &&
-	 eval "\$doit_exec \$mkdirprog $prefixes") ||
-	  test -d "$dstdir" || exit 1
-	obsolete_mkdir_used=true
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -479,15 +449,12 @@ do
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -500,24 +467,24 @@ do
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-	# Now remove or move aside any old file at destination location.
-	# We try this two ways since rm can't unlink itself on some
-	# systems and the destination file might be busy for other
-	# reasons.  In this case, the final cleanup might fail but the new
-	# file should still install successfully.
-	{
-	  test ! -f "$dst" ||
-	  $doit $rmcmd -f "$dst" 2>/dev/null ||
-	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-	  } ||
-	  { echo "$0: cannot unlink or rename $dst" >&2
-	    (exit 1); exit 1
-	  }
-	} &&
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
 
-	# Now rename the file to the real destination.
-	$doit $mvcmd "$dsttmp" "$dst"
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
@@ -529,6 +496,6 @@ done
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -pruN 0.3.3.9-1/link_rust.sh.in 0.3.4.8-1/link_rust.sh.in
--- 0.3.3.9-1/link_rust.sh.in	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/link_rust.sh.in	2018-06-21 12:38:21.000000000 +0000
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# A linker script used when building Rust tests.  Autoconf makes link_rust.sh
+# from link_rust_sh.in, and uses it to pass extra options to the linker
+# when linking Rust stuff.
+#
+# We'd like to remove the need for this, but build.rs doesn't let us pass
+# -static-libasan and -static-libubsan to the linker.
+
+$CCLD @RUST_LINKER_OPTIONS@ "$@"
diff -pruN 0.3.3.9-1/Makefile.am 0.3.4.8-1/Makefile.am
--- 0.3.3.9-1/Makefile.am	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/Makefile.am	2018-08-29 15:17:31.000000000 +0000
@@ -26,8 +26,9 @@ TESTING_TOR_BINARY=$(top_builddir)/src/o
 endif
 
 if USE_RUST
-rust_ldadd=$(top_builddir)/src/rust/target/release/@TOR_RUST_STATIC_NAME@ \
-	@TOR_RUST_EXTRA_LIBS@
+## this MUST be $(), otherwise am__DEPENDENCIES will not track it
+rust_ldadd=$(top_builddir)/$(TOR_RUST_LIB_PATH) \
+	$(TOR_RUST_EXTRA_LIBS)
 else
 rust_ldadd=
 endif
@@ -38,6 +39,7 @@ include contrib/include.am
 
 EXTRA_DIST+= \
 	ChangeLog					\
+	CONTRIBUTING					\
 	INSTALL						\
 	LICENSE						\
 	Makefile.nmake					\
@@ -51,14 +53,14 @@ AM_ETAGSFLAGS=--regex='{c}/MOCK_IMPL([^,
 if COVERAGE_ENABLED
 TEST_CFLAGS=-fno-inline -fprofile-arcs -ftest-coverage
 if DISABLE_ASSERTS_IN_UNIT_TESTS
-TEST_CPPFLAGS=-DTOR_UNIT_TESTS -DTOR_COVERAGE -DDISABLE_ASSERTS_IN_UNIT_TESTS
+TEST_CPPFLAGS=-DTOR_UNIT_TESTS -DTOR_COVERAGE -DDISABLE_ASSERTS_IN_UNIT_TESTS @TOR_MODULES_ALL_ENABLED@
 else
-TEST_CPPFLAGS=-DTOR_UNIT_TESTS -DTOR_COVERAGE
+TEST_CPPFLAGS=-DTOR_UNIT_TESTS -DTOR_COVERAGE @TOR_MODULES_ALL_ENABLED@
 endif
 TEST_NETWORK_FLAGS=--coverage --hs-multi-client 1
 else
 TEST_CFLAGS=
-TEST_CPPFLAGS=-DTOR_UNIT_TESTS
+TEST_CPPFLAGS=-DTOR_UNIT_TESTS @TOR_MODULES_ALL_ENABLED@
 TEST_NETWORK_FLAGS=--hs-multi-client 1
 endif
 TEST_NETWORK_WARNING_FLAGS=--quiet --only-warnings
@@ -125,6 +127,7 @@ test-network: need-chutney-path $(TESTIN
 # because they're incompatible
 test-network-all: need-chutney-path test-driver $(TESTING_TOR_BINARY) src/tools/tor-gencert
 	mkdir -p $(TEST_NETWORK_ALL_LOG_DIR)
+	rm -f $(TEST_NETWORK_ALL_LOG_DIR)/*.log $(TEST_NETWORK_ALL_LOG_DIR)/*.trs
 	@flavors="$(TEST_CHUTNEY_FLAVORS)"; \
 	if ping6 -q -c 1 -o ::1 >/dev/null 2>&1 || ping6 -q -c 1 -W 1 ::1 >/dev/null 2>&1 || ping -6 -c 1 -W 1 ::1 >/dev/null 2>&1; then \
 		echo "ping6 ::1 or ping ::1 succeeded, running IPv6 flavors: $(TEST_CHUTNEY_FLAVORS_IPV6)."; \
@@ -148,7 +151,7 @@ test-network-all: need-chutney-path test
 		$(top_srcdir)/src/test/test-network.sh $(TEST_NETWORK_WARNING_FLAGS); \
 	done; \
 	echo "Log and result files are available in $(TEST_NETWORK_ALL_LOG_DIR)."; \
-	! grep -q FAIL test_network_log/*.trs
+	! grep -q FAIL $(TEST_NETWORK_ALL_LOG_DIR)/*.trs
 
 need-stem-path:
 	@if test ! -d "$$STEM_SOURCE_DIR"; then \
@@ -217,6 +220,26 @@ check-logs:
 	$(top_srcdir)/scripts/maint/checkLogs.pl \
 		$(top_srcdir)/src/*/*.[ch] | sort -n
 
+.PHONY: check-typos
+check-typos:
+	@if test -x "`which misspell 2>&1;true`"; then \
+		echo "Checking for Typos ..."; \
+		(misspell \
+			$(top_srcdir)/src/[^e]*/*.[ch] \
+			$(top_srcdir)/doc \
+			$(top_srcdir)/contrib \
+			$(top_srcdir)/scripts \
+			$(top_srcdir)/README \
+			$(top_srcdir)/ChangeLog \
+			$(top_srcdir)/INSTALL \
+			$(top_srcdir)/ReleaseNotes \
+			$(top_srcdir)/LICENSE); \
+	else \
+		echo "Tor can use misspell to check for typos."; \
+		echo "It seems that you don't have misspell installed."; \
+		echo "You can install the latest version of misspell here: https://github.com/client9/misspell#install"; \
+	fi
+
 .PHONY: check-changes
 check-changes:
 if USEPYTHON
diff -pruN 0.3.3.9-1/Makefile.in 0.3.4.8-1/Makefile.in
--- 0.3.3.9-1/Makefile.in	2018-07-13 18:25:34.000000000 +0000
+++ 0.3.4.8-1/Makefile.in	2018-09-07 20:21:14.000000000 +0000
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -38,7 +38,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -111,34 +121,8 @@ TESTS = src/test/test$(EXEEXT) src/test/
 	$(TESTSCRIPTS)
 noinst_PROGRAMS = $(am__EXEEXT_1) src/test/bench$(EXEEXT) \
 	$(am__EXEEXT_2) src/test/test-ntor-cl$(EXEEXT) \
-	src/test/test-hs-ntor-cl$(EXEEXT) src/test/test-bt-cl$(EXEEXT) \
-	$(am__EXEEXT_3) $(am__EXEEXT_4) $(am__EXEEXT_5)
-DIST_COMMON = $(srcdir)/src/include.am $(srcdir)/src/ext/include.am \
-	$(srcdir)/src/trunnel/include.am \
-	$(srcdir)/src/common/include.am $(srcdir)/src/or/include.am \
-	$(srcdir)/src/rust/include.am \
-	$(srcdir)/src/rust/tor_rust/include.am \
-	$(srcdir)/src/test/include.am $(srcdir)/src/tools/include.am \
-	$(srcdir)/src/win32/include.am $(srcdir)/src/config/include.am \
-	$(srcdir)/src/test/fuzz/include.am \
-	$(srcdir)/src/trace/include.am $(srcdir)/doc/include.am \
-	$(srcdir)/contrib/include.am $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/configure \
-	$(am__configure_deps) $(srcdir)/orconfig.h.in \
-	$(srcdir)/Doxyfile.in \
-	$(top_srcdir)/contrib/dist/suse/tor.sh.in \
-	$(top_srcdir)/contrib/operator-tools/tor.logrotate.in \
-	$(top_srcdir)/contrib/dist/tor.sh.in \
-	$(top_srcdir)/contrib/dist/torctl.in \
-	$(top_srcdir)/contrib/dist/tor.service.in \
-	$(top_srcdir)/src/config/torrc.sample.in \
-	$(top_srcdir)/src/config/torrc.minimal.in \
-	$(top_srcdir)/src/rust/.cargo/config.in \
-	$(top_srcdir)/scripts/maint/checkOptionDocs.pl.in \
-	$(top_srcdir)/scripts/maint/updateVersions.pl.in depcomp \
-	$(am__noinst_HEADERS_DIST) test-driver ChangeLog INSTALL \
-	README ar-lib compile config.guess config.sub install-sh \
-	missing
+	src/test/test-hs-ntor-cl$(EXEEXT) $(am__EXEEXT_3) \
+	$(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6)
 @UNITTESTS_ENABLED_TRUE@am__append_1 = \
 @UNITTESTS_ENABLED_TRUE@	src/trunnel/libor-trunnel-testing.a
 
@@ -159,11 +143,15 @@ DIST_COMMON = $(srcdir)/src/include.am $
 @UNITTESTS_ENABLED_TRUE@	src/or/libtor-testing.a
 
 @COVERAGE_ENABLED_TRUE@am__append_8 = src/or/tor-cov
-@USE_RUST_TRUE@am__append_9 = \
+@BUILD_MODULE_DIRAUTH_TRUE@am__append_9 = $(MODULE_DIRAUTH_SOURCES)
+
+# Add the sources of the modules that are needed for tests to work here.
+@UNITTESTS_ENABLED_TRUE@am__append_10 = $(MODULE_DIRAUTH_SOURCES)
+@USE_RUST_TRUE@am__append_11 = \
 @USE_RUST_TRUE@	src/test/test_rust.sh
 
-@USEPYTHON_TRUE@am__append_10 = src/test/test_ntor.sh src/test/test_hs_ntor.sh src/test/test_bt.sh
-@UNITTESTS_ENABLED_TRUE@am__append_11 = \
+@USEPYTHON_TRUE@am__append_12 = src/test/test_ntor.sh src/test/test_hs_ntor.sh src/test/test_bt.sh
+@UNITTESTS_ENABLED_TRUE@am__append_13 = \
 @UNITTESTS_ENABLED_TRUE@	src/test/test \
 @UNITTESTS_ENABLED_TRUE@	src/test/test-slow \
 @UNITTESTS_ENABLED_TRUE@	src/test/test-memwipe \
@@ -172,12 +160,121 @@ DIST_COMMON = $(srcdir)/src/include.am $
 @UNITTESTS_ENABLED_TRUE@	src/test/test-switch-id \
 @UNITTESTS_ENABLED_TRUE@	src/test/test-timers
 
-@COVERAGE_ENABLED_TRUE@am__append_12 = src/tools/tor-cov-resolve src/tools/tor-cov-gencert
-@BUILD_LIBTORRUNNER_TRUE@am__append_13 = src/tools/libtorrunner.a
-@USE_EVENT_TRACING_DEBUG_TRUE@am__append_14 = \
+@UNITTESTS_ENABLED_TRUE@am__append_14 = \
+@UNITTESTS_ENABLED_TRUE@	src/test/log_test_helpers.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/hs_test_helpers.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/rend_test_helpers.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_accounting.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_addr.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_address.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_address_set.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_bridges.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_buffers.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_bwmgt.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_cell_formats.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_cell_queue.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_channel.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_channelpadding.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_channeltls.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_checkdir.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_circuitlist.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_circuitmux.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_circuitbuild.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_circuituse.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_circuitstats.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_compat_libevent.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_config.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_connection.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_conscache.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_consdiff.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_consdiffmgr.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_containers.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_controller.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_controller_events.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_crypto.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_crypto_openssl.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_data.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_dir.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_dir_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_dir_handle_get.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_dos.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_entryconn.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_entrynodes.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_geoip.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_guardfraction.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_extorport.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_config.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_cell.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_ntor.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_service.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_client.c  \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_intropoint.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_control.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_handles.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_cache.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_hs_descriptor.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_introduce.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_keypin.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_link_handshake.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_logging.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_mainloop.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_microdesc.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_nodelist.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_oom.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_oos.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_options.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_periodic_event.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_policy.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_procmon.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_proto_http.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_proto_misc.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_protover.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_pt.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_pubsub.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_relay.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_relaycell.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_relaycrypt.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_rendcache.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_replay.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_router.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_routerkeys.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_routerlist.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_routerset.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_scheduler.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_shared_random.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_socks.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_status.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_storagedir.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_threads.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_tortls.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_util.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_util_format.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_util_process.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_voting_schedule.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_helpers.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_dns.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/testing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/testing_rsakeys.c \
+@UNITTESTS_ENABLED_TRUE@	src/ext/tinytest.c
+
+@UNITTESTS_ENABLED_TRUE@am__append_15 = \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_slow.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_crypto_slow.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/test_util_slow.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/testing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/testing_rsakeys.c \
+@UNITTESTS_ENABLED_TRUE@	src/ext/tinytest.c
+
+@UNITTESTS_ENABLED_TRUE@am__append_16 = src/test/test-bt-cl
+@COVERAGE_ENABLED_TRUE@am__append_17 = src/tools/tor-cov-resolve src/tools/tor-cov-gencert
+@BUILD_LIBTORRUNNER_TRUE@am__append_18 = src/tools/libtorrunner.a
+@USE_EVENT_TRACING_DEBUG_TRUE@am__append_19 = \
 @USE_EVENT_TRACING_DEBUG_TRUE@	src/trace/debug.h
 
-@LIBFUZZER_ENABLED_TRUE@am__append_15 = -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-div
+@LIBFUZZER_ENABLED_TRUE@am__append_20 = -fsanitize-coverage=trace-pc-guard,trace-cmp,trace-div
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_sign.m4 \
@@ -185,15 +282,19 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/a
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps) $(am__noinst_HEADERS_DIST) \
+	$(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = orconfig.h
-CONFIG_CLEAN_FILES = Doxyfile contrib/dist/suse/tor.sh \
-	contrib/operator-tools/tor.logrotate contrib/dist/tor.sh \
-	contrib/dist/torctl contrib/dist/tor.service \
-	src/config/torrc.sample src/config/torrc.minimal \
-	src/rust/.cargo/config scripts/maint/checkOptionDocs.pl \
+CONFIG_CLEAN_FILES = Doxyfile config.rust link_rust.sh \
+	contrib/dist/suse/tor.sh contrib/operator-tools/tor.logrotate \
+	contrib/dist/tor.sh contrib/dist/torctl \
+	contrib/dist/tor.service src/config/torrc.sample \
+	src/config/torrc.minimal src/rust/.cargo/config \
+	scripts/maint/checkOptionDocs.pl \
 	scripts/maint/updateVersions.pl
 CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
@@ -214,6 +315,16 @@ src_common_libcurve25519_donna_a_OBJECTS
 	$(am_src_common_libcurve25519_donna_a_OBJECTS)
 src_common_libor_crypto_testing_a_AR = $(AR) $(ARFLAGS)
 src_common_libor_crypto_testing_a_LIBADD =
+am__src_common_libor_crypto_testing_a_SOURCES_DIST = src/common/aes.c \
+	src/common/buffers_tls.c src/common/compress.c \
+	src/common/compress_lzma.c src/common/compress_none.c \
+	src/common/compress_zlib.c src/common/compress_zstd.c \
+	src/common/crypto.c src/common/crypto_digest.c \
+	src/common/crypto_format.c src/common/crypto_openssl_mgt.c \
+	src/common/crypto_pwbox.c src/common/crypto_rand.c \
+	src/common/crypto_rsa.c src/common/crypto_s2k.c \
+	src/common/crypto_util.c src/common/tortls.c \
+	src/common/crypto_curve25519.c src/common/crypto_ed25519.c
 am__objects_1 =  \
 	src/common/src_common_libor_crypto_testing_a-aes.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-buffers_tls.$(OBJEXT) \
@@ -223,15 +334,19 @@ am__objects_1 =  \
 	src/common/src_common_libor_crypto_testing_a-compress_zlib.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-compress_zstd.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-crypto.$(OBJEXT) \
-	src/common/src_common_libor_crypto_testing_a-crypto_rsa.$(OBJEXT) \
+	src/common/src_common_libor_crypto_testing_a-crypto_digest.$(OBJEXT) \
+	src/common/src_common_libor_crypto_testing_a-crypto_format.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-crypto_openssl_mgt.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-crypto_pwbox.$(OBJEXT) \
+	src/common/src_common_libor_crypto_testing_a-crypto_rand.$(OBJEXT) \
+	src/common/src_common_libor_crypto_testing_a-crypto_rsa.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-crypto_s2k.$(OBJEXT) \
-	src/common/src_common_libor_crypto_testing_a-crypto_format.$(OBJEXT) \
+	src/common/src_common_libor_crypto_testing_a-crypto_util.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-tortls.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-crypto_curve25519.$(OBJEXT) \
 	src/common/src_common_libor_crypto_testing_a-crypto_ed25519.$(OBJEXT)
-am_src_common_libor_crypto_testing_a_OBJECTS = $(am__objects_1)
+@UNITTESTS_ENABLED_TRUE@am_src_common_libor_crypto_testing_a_OBJECTS =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__objects_1)
 src_common_libor_crypto_testing_a_OBJECTS =  \
 	$(am_src_common_libor_crypto_testing_a_OBJECTS)
 src_common_libor_crypto_a_AR = $(AR) $(ARFLAGS)
@@ -242,11 +357,14 @@ am__objects_2 = src/common/aes.$(OBJEXT)
 	src/common/compress_none.$(OBJEXT) \
 	src/common/compress_zlib.$(OBJEXT) \
 	src/common/compress_zstd.$(OBJEXT) src/common/crypto.$(OBJEXT) \
-	src/common/crypto_rsa.$(OBJEXT) \
+	src/common/crypto_digest.$(OBJEXT) \
+	src/common/crypto_format.$(OBJEXT) \
 	src/common/crypto_openssl_mgt.$(OBJEXT) \
 	src/common/crypto_pwbox.$(OBJEXT) \
+	src/common/crypto_rand.$(OBJEXT) \
+	src/common/crypto_rsa.$(OBJEXT) \
 	src/common/crypto_s2k.$(OBJEXT) \
-	src/common/crypto_format.$(OBJEXT) src/common/tortls.$(OBJEXT) \
+	src/common/crypto_util.$(OBJEXT) src/common/tortls.$(OBJEXT) \
 	src/common/crypto_curve25519.$(OBJEXT) \
 	src/common/crypto_ed25519.$(OBJEXT)
 am_src_common_libor_crypto_a_OBJECTS = $(am__objects_2)
@@ -261,7 +379,8 @@ am__src_common_libor_ctime_testing_a_SOU
 am__objects_4 = $(am__objects_3) \
 	src/ext/src_common_libor_ctime_testing_a-csiphash.$(OBJEXT) \
 	src/common/src_common_libor_ctime_testing_a-di_ops.$(OBJEXT)
-am_src_common_libor_ctime_testing_a_OBJECTS = $(am__objects_4)
+@UNITTESTS_ENABLED_TRUE@am_src_common_libor_ctime_testing_a_OBJECTS =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__objects_4)
 src_common_libor_ctime_testing_a_OBJECTS =  \
 	$(am_src_common_libor_ctime_testing_a_OBJECTS)
 src_common_libor_ctime_a_AR = $(AR) $(ARFLAGS)
@@ -277,11 +396,15 @@ src_common_libor_ctime_a_OBJECTS =  \
 	$(am_src_common_libor_ctime_a_OBJECTS)
 src_common_libor_event_testing_a_AR = $(AR) $(ARFLAGS)
 src_common_libor_event_testing_a_LIBADD =
+am__src_common_libor_event_testing_a_SOURCES_DIST =  \
+	src/common/compat_libevent.c src/common/procmon.c \
+	src/common/timers.c src/ext/timeouts/timeout.c
 am__objects_7 = src/common/src_common_libor_event_testing_a-compat_libevent.$(OBJEXT) \
 	src/common/src_common_libor_event_testing_a-procmon.$(OBJEXT) \
 	src/common/src_common_libor_event_testing_a-timers.$(OBJEXT) \
 	src/ext/timeouts/src_common_libor_event_testing_a-timeout.$(OBJEXT)
-am_src_common_libor_event_testing_a_OBJECTS = $(am__objects_7)
+@UNITTESTS_ENABLED_TRUE@am_src_common_libor_event_testing_a_OBJECTS =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__objects_7)
 src_common_libor_event_testing_a_OBJECTS =  \
 	$(am_src_common_libor_event_testing_a_OBJECTS)
 src_common_libor_event_a_AR = $(AR) $(ARFLAGS)
@@ -302,9 +425,10 @@ am__src_common_libor_testing_a_SOURCES_D
 	src/common/memarea.c src/common/pubsub.c src/common/util.c \
 	src/common/util_bug.c src/common/util_format.c \
 	src/common/util_process.c src/common/sandbox.c \
-	src/common/storagedir.c src/common/workqueue.c \
-	src/ext/OpenBSD_malloc_Linux.c src/common/compat_pthreads.c \
-	src/common/compat_winthreads.c src/ext/readpassphrase.c
+	src/common/storagedir.c src/common/token_bucket.c \
+	src/common/workqueue.c src/ext/OpenBSD_malloc_Linux.c \
+	src/common/compat_pthreads.c src/common/compat_winthreads.c \
+	src/ext/readpassphrase.c
 @USE_OPENBSD_MALLOC_TRUE@am__objects_9 = src/ext/src_common_libor_testing_a-OpenBSD_malloc_Linux.$(OBJEXT)
 @THREADS_PTHREADS_FALSE@@THREADS_WIN32_TRUE@am__objects_10 = src/common/src_common_libor_testing_a-compat_winthreads.$(OBJEXT)
 @THREADS_PTHREADS_TRUE@am__objects_10 = src/common/src_common_libor_testing_a-compat_pthreads.$(OBJEXT)
@@ -328,9 +452,11 @@ am__objects_12 =  \
 	src/common/src_common_libor_testing_a-util_process.$(OBJEXT) \
 	src/common/src_common_libor_testing_a-sandbox.$(OBJEXT) \
 	src/common/src_common_libor_testing_a-storagedir.$(OBJEXT) \
+	src/common/src_common_libor_testing_a-token_bucket.$(OBJEXT) \
 	src/common/src_common_libor_testing_a-workqueue.$(OBJEXT) \
 	$(am__objects_9) $(am__objects_10) $(am__objects_11)
-am_src_common_libor_testing_a_OBJECTS = $(am__objects_12)
+@UNITTESTS_ENABLED_TRUE@am_src_common_libor_testing_a_OBJECTS =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__objects_12)
 src_common_libor_testing_a_OBJECTS =  \
 	$(am_src_common_libor_testing_a_OBJECTS)
 src_common_libor_a_AR = $(AR) $(ARFLAGS)
@@ -343,9 +469,10 @@ am__src_common_libor_a_SOURCES_DIST = sr
 	src/common/memarea.c src/common/pubsub.c src/common/util.c \
 	src/common/util_bug.c src/common/util_format.c \
 	src/common/util_process.c src/common/sandbox.c \
-	src/common/storagedir.c src/common/workqueue.c \
-	src/ext/OpenBSD_malloc_Linux.c src/common/compat_pthreads.c \
-	src/common/compat_winthreads.c src/ext/readpassphrase.c
+	src/common/storagedir.c src/common/token_bucket.c \
+	src/common/workqueue.c src/ext/OpenBSD_malloc_Linux.c \
+	src/common/compat_pthreads.c src/common/compat_winthreads.c \
+	src/ext/readpassphrase.c
 @USE_OPENBSD_MALLOC_TRUE@am__objects_13 = src/ext/OpenBSD_malloc_Linux.$(OBJEXT)
 @THREADS_PTHREADS_FALSE@@THREADS_WIN32_TRUE@am__objects_14 = src/common/compat_winthreads.$(OBJEXT)
 @THREADS_PTHREADS_TRUE@am__objects_14 =  \
@@ -363,8 +490,10 @@ am__objects_16 = src/common/address.$(OB
 	src/common/util.$(OBJEXT) src/common/util_bug.$(OBJEXT) \
 	src/common/util_format.$(OBJEXT) \
 	src/common/util_process.$(OBJEXT) src/common/sandbox.$(OBJEXT) \
-	src/common/storagedir.$(OBJEXT) src/common/workqueue.$(OBJEXT) \
-	$(am__objects_13) $(am__objects_14) $(am__objects_15)
+	src/common/storagedir.$(OBJEXT) \
+	src/common/token_bucket.$(OBJEXT) \
+	src/common/workqueue.$(OBJEXT) $(am__objects_13) \
+	$(am__objects_14) $(am__objects_15)
 am_src_common_libor_a_OBJECTS = $(am__objects_16)
 src_common_libor_a_OBJECTS = $(am_src_common_libor_a_OBJECTS)
 src_ext_ed25519_donna_libed25519_donna_a_AR = $(AR) $(ARFLAGS)
@@ -433,33 +562,41 @@ am__src_or_libtor_testing_a_SOURCES_DIST
 	src/or/confparse.c src/or/connection.c \
 	src/or/connection_edge.c src/or/connection_or.c \
 	src/or/conscache.c src/or/consdiff.c src/or/consdiffmgr.c \
-	src/or/control.c src/or/cpuworker.c src/or/dircollate.c \
-	src/or/directory.c src/or/dirserv.c src/or/dirvote.c \
-	src/or/dns.c src/or/dnsserv.c src/or/dos.c src/or/fp_pair.c \
-	src/or/geoip.c src/or/entrynodes.c src/or/ext_orport.c \
-	src/or/git_revision.c src/or/hibernate.c src/or/hs_cache.c \
-	src/or/hs_cell.c src/or/hs_circuit.c src/or/hs_circuitmap.c \
-	src/or/hs_client.c src/or/hs_common.c src/or/hs_config.c \
-	src/or/hs_control.c src/or/hs_descriptor.c src/or/hs_ident.c \
-	src/or/hs_intropoint.c src/or/hs_ntor.c src/or/hs_service.c \
-	src/or/hs_stats.c src/or/keypin.c src/or/main.c \
-	src/or/microdesc.c src/or/networkstatus.c src/or/nodelist.c \
-	src/or/onion.c src/or/onion_fast.c src/or/onion_tap.c \
-	src/or/shared_random.c src/or/shared_random_state.c \
-	src/or/transports.c src/or/parsecommon.c src/or/periodic.c \
-	src/or/protover.c src/or/protover_rust.c src/or/proto_cell.c \
-	src/or/proto_control0.c src/or/proto_ext_or.c \
-	src/or/proto_http.c src/or/proto_socks.c src/or/policies.c \
-	src/or/reasons.c src/or/relay.c src/or/rendcache.c \
-	src/or/rendclient.c src/or/rendcommon.c src/or/rendmid.c \
-	src/or/rendservice.c src/or/rephist.c src/or/replaycache.c \
-	src/or/router.c src/or/routerkeys.c src/or/routerlist.c \
-	src/or/routerparse.c src/or/routerset.c src/or/scheduler.c \
-	src/or/scheduler_kist.c src/or/scheduler_vanilla.c \
+	src/or/control.c src/or/cpuworker.c src/or/directory.c \
+	src/or/dirserv.c src/or/dns.c src/or/dnsserv.c src/or/dos.c \
+	src/or/fp_pair.c src/or/geoip.c src/or/entrynodes.c \
+	src/or/ext_orport.c src/or/git_revision.c src/or/hibernate.c \
+	src/or/hs_cache.c src/or/hs_cell.c src/or/hs_circuit.c \
+	src/or/hs_circuitmap.c src/or/hs_client.c src/or/hs_common.c \
+	src/or/hs_config.c src/or/hs_control.c src/or/hs_descriptor.c \
+	src/or/hs_ident.c src/or/hs_intropoint.c src/or/hs_ntor.c \
+	src/or/hs_service.c src/or/hs_stats.c src/or/keypin.c \
+	src/or/main.c src/or/microdesc.c src/or/networkstatus.c \
+	src/or/nodelist.c src/or/onion.c src/or/onion_fast.c \
+	src/or/onion_tap.c src/or/transports.c src/or/parsecommon.c \
+	src/or/periodic.c src/or/protover.c src/or/protover_rust.c \
+	src/or/proto_cell.c src/or/proto_control0.c \
+	src/or/proto_ext_or.c src/or/proto_http.c src/or/proto_socks.c \
+	src/or/policies.c src/or/reasons.c src/or/relay.c \
+	src/or/relay_crypto.c src/or/rendcache.c src/or/rendclient.c \
+	src/or/rendcommon.c src/or/rendmid.c src/or/rendservice.c \
+	src/or/rephist.c src/or/replaycache.c src/or/router.c \
+	src/or/routerkeys.c src/or/routerlist.c src/or/routerparse.c \
+	src/or/routerset.c src/or/scheduler.c src/or/scheduler_kist.c \
+	src/or/scheduler_vanilla.c src/or/shared_random_client.c \
 	src/or/statefile.c src/or/status.c src/or/torcert.c \
-	src/or/tor_api.c src/or/onion_ntor.c src/or/ntmain.c
+	src/or/tor_api.c src/or/voting_schedule.c src/or/onion_ntor.c \
+	src/or/ntmain.c src/or/dirauth/dircollate.c \
+	src/or/dirauth/dirvote.c src/or/dirauth/shared_random.c \
+	src/or/dirauth/shared_random_state.c
 @BUILD_NT_SERVICES_TRUE@am__objects_17 = src/or/src_or_libtor_testing_a-ntmain.$(OBJEXT)
-am__objects_18 = src/or/src_or_libtor_testing_a-addressmap.$(OBJEXT) \
+am__objects_18 =  \
+	src/or/dirauth/src_or_libtor_testing_a-dircollate.$(OBJEXT) \
+	src/or/dirauth/src_or_libtor_testing_a-dirvote.$(OBJEXT) \
+	src/or/dirauth/src_or_libtor_testing_a-shared_random.$(OBJEXT) \
+	src/or/dirauth/src_or_libtor_testing_a-shared_random_state.$(OBJEXT)
+@BUILD_MODULE_DIRAUTH_TRUE@am__objects_19 = $(am__objects_18)
+am__objects_20 = src/or/src_or_libtor_testing_a-addressmap.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-bridges.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-channel.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-channelpadding.$(OBJEXT) \
@@ -482,10 +619,8 @@ am__objects_18 = src/or/src_or_libtor_te
 	src/or/src_or_libtor_testing_a-consdiffmgr.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-control.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-cpuworker.$(OBJEXT) \
-	src/or/src_or_libtor_testing_a-dircollate.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-directory.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-dirserv.$(OBJEXT) \
-	src/or/src_or_libtor_testing_a-dirvote.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-dns.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-dnsserv.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-dos.$(OBJEXT) \
@@ -517,8 +652,6 @@ am__objects_18 = src/or/src_or_libtor_te
 	src/or/src_or_libtor_testing_a-onion.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-onion_fast.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-onion_tap.$(OBJEXT) \
-	src/or/src_or_libtor_testing_a-shared_random.$(OBJEXT) \
-	src/or/src_or_libtor_testing_a-shared_random_state.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-transports.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-parsecommon.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-periodic.$(OBJEXT) \
@@ -532,6 +665,7 @@ am__objects_18 = src/or/src_or_libtor_te
 	src/or/src_or_libtor_testing_a-policies.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-reasons.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-relay.$(OBJEXT) \
+	src/or/src_or_libtor_testing_a-relay_crypto.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-rendcache.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-rendclient.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-rendcommon.$(OBJEXT) \
@@ -547,13 +681,18 @@ am__objects_18 = src/or/src_or_libtor_te
 	src/or/src_or_libtor_testing_a-scheduler.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-scheduler_kist.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-scheduler_vanilla.$(OBJEXT) \
+	src/or/src_or_libtor_testing_a-shared_random_client.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-statefile.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-status.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-torcert.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-tor_api.$(OBJEXT) \
+	src/or/src_or_libtor_testing_a-voting_schedule.$(OBJEXT) \
 	src/or/src_or_libtor_testing_a-onion_ntor.$(OBJEXT) \
-	$(am__objects_17)
-am_src_or_libtor_testing_a_OBJECTS = $(am__objects_18)
+	$(am__objects_17) $(am__objects_19)
+@UNITTESTS_ENABLED_TRUE@am__objects_21 = $(am__objects_18)
+am__objects_22 = $(am__objects_20) $(am__objects_21)
+@UNITTESTS_ENABLED_TRUE@am_src_or_libtor_testing_a_OBJECTS =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__objects_22)
 src_or_libtor_testing_a_OBJECTS =  \
 	$(am_src_or_libtor_testing_a_OBJECTS)
 src_or_libtor_a_AR = $(AR) $(ARFLAGS)
@@ -567,33 +706,40 @@ am__src_or_libtor_a_SOURCES_DIST = src/o
 	src/or/confparse.c src/or/connection.c \
 	src/or/connection_edge.c src/or/connection_or.c \
 	src/or/conscache.c src/or/consdiff.c src/or/consdiffmgr.c \
-	src/or/control.c src/or/cpuworker.c src/or/dircollate.c \
-	src/or/directory.c src/or/dirserv.c src/or/dirvote.c \
-	src/or/dns.c src/or/dnsserv.c src/or/dos.c src/or/fp_pair.c \
-	src/or/geoip.c src/or/entrynodes.c src/or/ext_orport.c \
-	src/or/git_revision.c src/or/hibernate.c src/or/hs_cache.c \
-	src/or/hs_cell.c src/or/hs_circuit.c src/or/hs_circuitmap.c \
-	src/or/hs_client.c src/or/hs_common.c src/or/hs_config.c \
-	src/or/hs_control.c src/or/hs_descriptor.c src/or/hs_ident.c \
-	src/or/hs_intropoint.c src/or/hs_ntor.c src/or/hs_service.c \
-	src/or/hs_stats.c src/or/keypin.c src/or/main.c \
-	src/or/microdesc.c src/or/networkstatus.c src/or/nodelist.c \
-	src/or/onion.c src/or/onion_fast.c src/or/onion_tap.c \
-	src/or/shared_random.c src/or/shared_random_state.c \
-	src/or/transports.c src/or/parsecommon.c src/or/periodic.c \
-	src/or/protover.c src/or/protover_rust.c src/or/proto_cell.c \
-	src/or/proto_control0.c src/or/proto_ext_or.c \
-	src/or/proto_http.c src/or/proto_socks.c src/or/policies.c \
-	src/or/reasons.c src/or/relay.c src/or/rendcache.c \
-	src/or/rendclient.c src/or/rendcommon.c src/or/rendmid.c \
-	src/or/rendservice.c src/or/rephist.c src/or/replaycache.c \
-	src/or/router.c src/or/routerkeys.c src/or/routerlist.c \
-	src/or/routerparse.c src/or/routerset.c src/or/scheduler.c \
-	src/or/scheduler_kist.c src/or/scheduler_vanilla.c \
+	src/or/control.c src/or/cpuworker.c src/or/directory.c \
+	src/or/dirserv.c src/or/dns.c src/or/dnsserv.c src/or/dos.c \
+	src/or/fp_pair.c src/or/geoip.c src/or/entrynodes.c \
+	src/or/ext_orport.c src/or/git_revision.c src/or/hibernate.c \
+	src/or/hs_cache.c src/or/hs_cell.c src/or/hs_circuit.c \
+	src/or/hs_circuitmap.c src/or/hs_client.c src/or/hs_common.c \
+	src/or/hs_config.c src/or/hs_control.c src/or/hs_descriptor.c \
+	src/or/hs_ident.c src/or/hs_intropoint.c src/or/hs_ntor.c \
+	src/or/hs_service.c src/or/hs_stats.c src/or/keypin.c \
+	src/or/main.c src/or/microdesc.c src/or/networkstatus.c \
+	src/or/nodelist.c src/or/onion.c src/or/onion_fast.c \
+	src/or/onion_tap.c src/or/transports.c src/or/parsecommon.c \
+	src/or/periodic.c src/or/protover.c src/or/protover_rust.c \
+	src/or/proto_cell.c src/or/proto_control0.c \
+	src/or/proto_ext_or.c src/or/proto_http.c src/or/proto_socks.c \
+	src/or/policies.c src/or/reasons.c src/or/relay.c \
+	src/or/relay_crypto.c src/or/rendcache.c src/or/rendclient.c \
+	src/or/rendcommon.c src/or/rendmid.c src/or/rendservice.c \
+	src/or/rephist.c src/or/replaycache.c src/or/router.c \
+	src/or/routerkeys.c src/or/routerlist.c src/or/routerparse.c \
+	src/or/routerset.c src/or/scheduler.c src/or/scheduler_kist.c \
+	src/or/scheduler_vanilla.c src/or/shared_random_client.c \
 	src/or/statefile.c src/or/status.c src/or/torcert.c \
-	src/or/tor_api.c src/or/onion_ntor.c src/or/ntmain.c
-@BUILD_NT_SERVICES_TRUE@am__objects_19 = src/or/ntmain.$(OBJEXT)
-am__objects_20 = src/or/addressmap.$(OBJEXT) src/or/bridges.$(OBJEXT) \
+	src/or/tor_api.c src/or/voting_schedule.c src/or/onion_ntor.c \
+	src/or/ntmain.c src/or/dirauth/dircollate.c \
+	src/or/dirauth/dirvote.c src/or/dirauth/shared_random.c \
+	src/or/dirauth/shared_random_state.c
+@BUILD_NT_SERVICES_TRUE@am__objects_23 = src/or/ntmain.$(OBJEXT)
+am__objects_24 = src/or/dirauth/dircollate.$(OBJEXT) \
+	src/or/dirauth/dirvote.$(OBJEXT) \
+	src/or/dirauth/shared_random.$(OBJEXT) \
+	src/or/dirauth/shared_random_state.$(OBJEXT)
+@BUILD_MODULE_DIRAUTH_TRUE@am__objects_25 = $(am__objects_24)
+am__objects_26 = src/or/addressmap.$(OBJEXT) src/or/bridges.$(OBJEXT) \
 	src/or/channel.$(OBJEXT) src/or/channelpadding.$(OBJEXT) \
 	src/or/channeltls.$(OBJEXT) src/or/circpathbias.$(OBJEXT) \
 	src/or/circuitbuild.$(OBJEXT) src/or/circuitlist.$(OBJEXT) \
@@ -605,8 +751,7 @@ am__objects_20 = src/or/addressmap.$(OBJ
 	src/or/connection_or.$(OBJEXT) src/or/conscache.$(OBJEXT) \
 	src/or/consdiff.$(OBJEXT) src/or/consdiffmgr.$(OBJEXT) \
 	src/or/control.$(OBJEXT) src/or/cpuworker.$(OBJEXT) \
-	src/or/dircollate.$(OBJEXT) src/or/directory.$(OBJEXT) \
-	src/or/dirserv.$(OBJEXT) src/or/dirvote.$(OBJEXT) \
+	src/or/directory.$(OBJEXT) src/or/dirserv.$(OBJEXT) \
 	src/or/dns.$(OBJEXT) src/or/dnsserv.$(OBJEXT) \
 	src/or/dos.$(OBJEXT) src/or/fp_pair.$(OBJEXT) \
 	src/or/geoip.$(OBJEXT) src/or/entrynodes.$(OBJEXT) \
@@ -622,15 +767,14 @@ am__objects_20 = src/or/addressmap.$(OBJ
 	src/or/main.$(OBJEXT) src/or/microdesc.$(OBJEXT) \
 	src/or/networkstatus.$(OBJEXT) src/or/nodelist.$(OBJEXT) \
 	src/or/onion.$(OBJEXT) src/or/onion_fast.$(OBJEXT) \
-	src/or/onion_tap.$(OBJEXT) src/or/shared_random.$(OBJEXT) \
-	src/or/shared_random_state.$(OBJEXT) \
-	src/or/transports.$(OBJEXT) src/or/parsecommon.$(OBJEXT) \
-	src/or/periodic.$(OBJEXT) src/or/protover.$(OBJEXT) \
-	src/or/protover_rust.$(OBJEXT) src/or/proto_cell.$(OBJEXT) \
-	src/or/proto_control0.$(OBJEXT) src/or/proto_ext_or.$(OBJEXT) \
-	src/or/proto_http.$(OBJEXT) src/or/proto_socks.$(OBJEXT) \
-	src/or/policies.$(OBJEXT) src/or/reasons.$(OBJEXT) \
-	src/or/relay.$(OBJEXT) src/or/rendcache.$(OBJEXT) \
+	src/or/onion_tap.$(OBJEXT) src/or/transports.$(OBJEXT) \
+	src/or/parsecommon.$(OBJEXT) src/or/periodic.$(OBJEXT) \
+	src/or/protover.$(OBJEXT) src/or/protover_rust.$(OBJEXT) \
+	src/or/proto_cell.$(OBJEXT) src/or/proto_control0.$(OBJEXT) \
+	src/or/proto_ext_or.$(OBJEXT) src/or/proto_http.$(OBJEXT) \
+	src/or/proto_socks.$(OBJEXT) src/or/policies.$(OBJEXT) \
+	src/or/reasons.$(OBJEXT) src/or/relay.$(OBJEXT) \
+	src/or/relay_crypto.$(OBJEXT) src/or/rendcache.$(OBJEXT) \
 	src/or/rendclient.$(OBJEXT) src/or/rendcommon.$(OBJEXT) \
 	src/or/rendmid.$(OBJEXT) src/or/rendservice.$(OBJEXT) \
 	src/or/rephist.$(OBJEXT) src/or/replaycache.$(OBJEXT) \
@@ -638,80 +782,75 @@ am__objects_20 = src/or/addressmap.$(OBJ
 	src/or/routerlist.$(OBJEXT) src/or/routerparse.$(OBJEXT) \
 	src/or/routerset.$(OBJEXT) src/or/scheduler.$(OBJEXT) \
 	src/or/scheduler_kist.$(OBJEXT) \
-	src/or/scheduler_vanilla.$(OBJEXT) src/or/statefile.$(OBJEXT) \
-	src/or/status.$(OBJEXT) src/or/torcert.$(OBJEXT) \
-	src/or/tor_api.$(OBJEXT) src/or/onion_ntor.$(OBJEXT) \
-	$(am__objects_19)
-am_src_or_libtor_a_OBJECTS = $(am__objects_20)
+	src/or/scheduler_vanilla.$(OBJEXT) \
+	src/or/shared_random_client.$(OBJEXT) \
+	src/or/statefile.$(OBJEXT) src/or/status.$(OBJEXT) \
+	src/or/torcert.$(OBJEXT) src/or/tor_api.$(OBJEXT) \
+	src/or/voting_schedule.$(OBJEXT) src/or/onion_ntor.$(OBJEXT) \
+	$(am__objects_23) $(am__objects_25)
+am_src_or_libtor_a_OBJECTS = $(am__objects_26)
 src_or_libtor_a_OBJECTS = $(am_src_or_libtor_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_consensus_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_consensus_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_consensus_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_consensus.c
-am__objects_21 = src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzz_consensus.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_consensus_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_21)
+@UNITTESTS_ENABLED_TRUE@am__objects_27 = src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzz_consensus.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_consensus_a_OBJECTS = $(am__objects_27)
 src_test_fuzz_liboss_fuzz_consensus_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_consensus_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_descriptor_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_descriptor_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_descriptor_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_descriptor.c
-am__objects_22 = src/test/fuzz/src_test_fuzz_liboss_fuzz_descriptor_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_descriptor_a-fuzz_descriptor.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_descriptor_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_22)
+@UNITTESTS_ENABLED_TRUE@am__objects_28 = src/test/fuzz/src_test_fuzz_liboss_fuzz_descriptor_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_descriptor_a-fuzz_descriptor.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_descriptor_a_OBJECTS = $(am__objects_28)
 src_test_fuzz_liboss_fuzz_descriptor_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_descriptor_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_diff_apply_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_diff_apply_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_diff_apply_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_diff_apply.c
-am__objects_23 = src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_apply_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_apply_a-fuzz_diff_apply.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_diff_apply_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_23)
+@UNITTESTS_ENABLED_TRUE@am__objects_29 = src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_apply_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_apply_a-fuzz_diff_apply.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_diff_apply_a_OBJECTS = $(am__objects_29)
 src_test_fuzz_liboss_fuzz_diff_apply_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_diff_apply_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_diff_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_diff_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_diff_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_diff.c
-am__objects_24 = src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_a-fuzz_diff.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_diff_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_24)
+@UNITTESTS_ENABLED_TRUE@am__objects_30 = src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_diff_a-fuzz_diff.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_diff_a_OBJECTS = $(am__objects_30)
 src_test_fuzz_liboss_fuzz_diff_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_diff_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_extrainfo_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_extrainfo_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_extrainfo_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_extrainfo.c
-am__objects_25 = src/test/fuzz/src_test_fuzz_liboss_fuzz_extrainfo_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_extrainfo_a-fuzz_extrainfo.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_extrainfo_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_25)
+@UNITTESTS_ENABLED_TRUE@am__objects_31 = src/test/fuzz/src_test_fuzz_liboss_fuzz_extrainfo_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_extrainfo_a-fuzz_extrainfo.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_extrainfo_a_OBJECTS = $(am__objects_31)
 src_test_fuzz_liboss_fuzz_extrainfo_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_extrainfo_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_hsdescv2_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_hsdescv2_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_hsdescv2_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_hsdescv2.c
-am__objects_26 = src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv2_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv2_a-fuzz_hsdescv2.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_hsdescv2_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_26)
+@UNITTESTS_ENABLED_TRUE@am__objects_32 = src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv2_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv2_a-fuzz_hsdescv2.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_hsdescv2_a_OBJECTS = $(am__objects_32)
 src_test_fuzz_liboss_fuzz_hsdescv2_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_hsdescv2_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_hsdescv3_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_hsdescv3_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_hsdescv3_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_hsdescv3.c
-am__objects_27 = src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv3_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv3_a-fuzz_hsdescv3.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_hsdescv3_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_27)
+@UNITTESTS_ENABLED_TRUE@am__objects_33 = src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv3_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_hsdescv3_a-fuzz_hsdescv3.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_hsdescv3_a_OBJECTS = $(am__objects_33)
 src_test_fuzz_liboss_fuzz_hsdescv3_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_hsdescv3_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_http_connect_a_AR = $(AR) $(ARFLAGS)
@@ -719,50 +858,45 @@ src_test_fuzz_liboss_fuzz_http_connect_a
 am__src_test_fuzz_liboss_fuzz_http_connect_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c \
 	src/test/fuzz/fuzz_http_connect.c
-am__objects_28 = src/test/fuzz/src_test_fuzz_liboss_fuzz_http_connect_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_http_connect_a-fuzz_http_connect.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_http_connect_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_28)
+@UNITTESTS_ENABLED_TRUE@am__objects_34 = src/test/fuzz/src_test_fuzz_liboss_fuzz_http_connect_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_http_connect_a-fuzz_http_connect.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_http_connect_a_OBJECTS = $(am__objects_34)
 src_test_fuzz_liboss_fuzz_http_connect_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_http_connect_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_http_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_http_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_http_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_http.c
-am__objects_29 = src/test/fuzz/src_test_fuzz_liboss_fuzz_http_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_http_a-fuzz_http.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_http_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_29)
+@UNITTESTS_ENABLED_TRUE@am__objects_35 = src/test/fuzz/src_test_fuzz_liboss_fuzz_http_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_http_a-fuzz_http.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_http_a_OBJECTS = $(am__objects_35)
 src_test_fuzz_liboss_fuzz_http_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_http_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_iptsv2_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_iptsv2_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_iptsv2_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_iptsv2.c
-am__objects_30 = src/test/fuzz/src_test_fuzz_liboss_fuzz_iptsv2_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_iptsv2_a-fuzz_iptsv2.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_iptsv2_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_30)
+@UNITTESTS_ENABLED_TRUE@am__objects_36 = src/test/fuzz/src_test_fuzz_liboss_fuzz_iptsv2_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_iptsv2_a-fuzz_iptsv2.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_iptsv2_a_OBJECTS = $(am__objects_36)
 src_test_fuzz_liboss_fuzz_iptsv2_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_iptsv2_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_microdesc_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_microdesc_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_microdesc_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_microdesc.c
-am__objects_31 = src/test/fuzz/src_test_fuzz_liboss_fuzz_microdesc_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_microdesc_a-fuzz_microdesc.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_microdesc_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_31)
+@UNITTESTS_ENABLED_TRUE@am__objects_37 = src/test/fuzz/src_test_fuzz_liboss_fuzz_microdesc_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_microdesc_a-fuzz_microdesc.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_microdesc_a_OBJECTS = $(am__objects_37)
 src_test_fuzz_liboss_fuzz_microdesc_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_microdesc_a_OBJECTS)
 src_test_fuzz_liboss_fuzz_vrs_a_AR = $(AR) $(ARFLAGS)
 src_test_fuzz_liboss_fuzz_vrs_a_LIBADD =
 am__src_test_fuzz_liboss_fuzz_vrs_a_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_vrs.c
-am__objects_32 = src/test/fuzz/src_test_fuzz_liboss_fuzz_vrs_a-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_liboss_fuzz_vrs_a-fuzz_vrs.$(OBJEXT)
-@OSS_FUZZ_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_vrs_a_OBJECTS =  \
-@OSS_FUZZ_ENABLED_TRUE@	$(am__objects_32)
+@UNITTESTS_ENABLED_TRUE@am__objects_38 = src/test/fuzz/src_test_fuzz_liboss_fuzz_vrs_a-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_liboss_fuzz_vrs_a-fuzz_vrs.$(OBJEXT)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_liboss_fuzz_vrs_a_OBJECTS = $(am__objects_38)
 src_test_fuzz_liboss_fuzz_vrs_a_OBJECTS =  \
 	$(am_src_test_fuzz_liboss_fuzz_vrs_a_OBJECTS)
 src_tools_libtorrunner_a_AR = $(AR) $(ARFLAGS)
@@ -776,13 +910,21 @@ src_tools_libtorrunner_a_OBJECTS =  \
 	$(am_src_tools_libtorrunner_a_OBJECTS)
 src_trace_libor_trace_a_AR = $(AR) $(ARFLAGS)
 src_trace_libor_trace_a_LIBADD =
-am__objects_33 = src/trace/trace.$(OBJEXT)
-am_src_trace_libor_trace_a_OBJECTS = $(am__objects_33)
+am__objects_39 = src/trace/trace.$(OBJEXT)
+am_src_trace_libor_trace_a_OBJECTS = $(am__objects_39)
 src_trace_libor_trace_a_OBJECTS =  \
 	$(am_src_trace_libor_trace_a_OBJECTS)
 src_trunnel_libor_trunnel_testing_a_AR = $(AR) $(ARFLAGS)
 src_trunnel_libor_trunnel_testing_a_LIBADD =
-am__objects_34 = src/ext/trunnel/src_trunnel_libor_trunnel_testing_a-trunnel.$(OBJEXT) \
+am__src_trunnel_libor_trunnel_testing_a_SOURCES_DIST =  \
+	src/ext/trunnel/trunnel.c src/trunnel/ed25519_cert.c \
+	src/trunnel/link_handshake.c src/trunnel/pwbox.c \
+	src/trunnel/hs/cell_common.c \
+	src/trunnel/hs/cell_establish_intro.c \
+	src/trunnel/hs/cell_introduce1.c \
+	src/trunnel/hs/cell_rendezvous.c \
+	src/trunnel/channelpadding_negotiation.c
+am__objects_40 = src/ext/trunnel/src_trunnel_libor_trunnel_testing_a-trunnel.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_testing_a-ed25519_cert.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_testing_a-link_handshake.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_testing_a-pwbox.$(OBJEXT) \
@@ -791,12 +933,13 @@ am__objects_34 = src/ext/trunnel/src_tru
 	src/trunnel/hs/src_trunnel_libor_trunnel_testing_a-cell_introduce1.$(OBJEXT) \
 	src/trunnel/hs/src_trunnel_libor_trunnel_testing_a-cell_rendezvous.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_testing_a-channelpadding_negotiation.$(OBJEXT)
-am_src_trunnel_libor_trunnel_testing_a_OBJECTS = $(am__objects_34)
+@UNITTESTS_ENABLED_TRUE@am_src_trunnel_libor_trunnel_testing_a_OBJECTS =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__objects_40)
 src_trunnel_libor_trunnel_testing_a_OBJECTS =  \
 	$(am_src_trunnel_libor_trunnel_testing_a_OBJECTS)
 src_trunnel_libor_trunnel_a_AR = $(AR) $(ARFLAGS)
 src_trunnel_libor_trunnel_a_LIBADD =
-am__objects_35 =  \
+am__objects_41 =  \
 	src/ext/trunnel/src_trunnel_libor_trunnel_a-trunnel.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_a-ed25519_cert.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_a-link_handshake.$(OBJEXT) \
@@ -806,7 +949,7 @@ am__objects_35 =  \
 	src/trunnel/hs/src_trunnel_libor_trunnel_a-cell_introduce1.$(OBJEXT) \
 	src/trunnel/hs/src_trunnel_libor_trunnel_a-cell_rendezvous.$(OBJEXT) \
 	src/trunnel/src_trunnel_libor_trunnel_a-channelpadding_negotiation.$(OBJEXT)
-am_src_trunnel_libor_trunnel_a_OBJECTS = $(am__objects_35)
+am_src_trunnel_libor_trunnel_a_OBJECTS = $(am__objects_41)
 src_trunnel_libor_trunnel_a_OBJECTS =  \
 	$(am_src_trunnel_libor_trunnel_a_OBJECTS)
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
@@ -820,22 +963,24 @@ am__installdirs = "$(DESTDIR)$(bindir)"
 @UNITTESTS_ENABLED_TRUE@	src/test/test_workqueue$(EXEEXT) \
 @UNITTESTS_ENABLED_TRUE@	src/test/test-switch-id$(EXEEXT) \
 @UNITTESTS_ENABLED_TRUE@	src/test/test-timers$(EXEEXT)
-@COVERAGE_ENABLED_TRUE@am__EXEEXT_3 =  \
+@UNITTESTS_ENABLED_TRUE@am__EXEEXT_3 = src/test/test-bt-cl$(EXEEXT)
+@COVERAGE_ENABLED_TRUE@am__EXEEXT_4 =  \
 @COVERAGE_ENABLED_TRUE@	src/tools/tor-cov-resolve$(EXEEXT) \
 @COVERAGE_ENABLED_TRUE@	src/tools/tor-cov-gencert$(EXEEXT)
-am__EXEEXT_4 = src/test/fuzz/fuzz-consensus$(EXEEXT) \
-	src/test/fuzz/fuzz-descriptor$(EXEEXT) \
-	src/test/fuzz/fuzz-diff$(EXEEXT) \
-	src/test/fuzz/fuzz-diff-apply$(EXEEXT) \
-	src/test/fuzz/fuzz-extrainfo$(EXEEXT) \
-	src/test/fuzz/fuzz-hsdescv2$(EXEEXT) \
-	src/test/fuzz/fuzz-hsdescv3$(EXEEXT) \
-	src/test/fuzz/fuzz-http$(EXEEXT) \
-	src/test/fuzz/fuzz-http-connect$(EXEEXT) \
-	src/test/fuzz/fuzz-iptsv2$(EXEEXT) \
-	src/test/fuzz/fuzz-microdesc$(EXEEXT) \
-	src/test/fuzz/fuzz-vrs$(EXEEXT)
-@LIBFUZZER_ENABLED_TRUE@am__EXEEXT_5 = src/test/fuzz/lf-fuzz-consensus$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@am__EXEEXT_5 =  \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-consensus$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-descriptor$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-diff$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-diff-apply$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-extrainfo$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-hsdescv2$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-hsdescv3$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-http$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-http-connect$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-iptsv2$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-microdesc$(EXEEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-vrs$(EXEEXT)
+@LIBFUZZER_ENABLED_TRUE@am__EXEEXT_6 = src/test/fuzz/lf-fuzz-consensus$(EXEEXT) \
 @LIBFUZZER_ENABLED_TRUE@	src/test/fuzz/lf-fuzz-descriptor$(EXEEXT) \
 @LIBFUZZER_ENABLED_TRUE@	src/test/fuzz/lf-fuzz-diff$(EXEEXT) \
 @LIBFUZZER_ENABLED_TRUE@	src/test/fuzz/lf-fuzz-diff-apply$(EXEEXT) \
@@ -850,12 +995,15 @@ am__EXEEXT_4 = src/test/fuzz/fuzz-consen
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 am_src_or_tor_OBJECTS = src/or/tor_main.$(OBJEXT)
 src_or_tor_OBJECTS = $(am_src_or_tor_OBJECTS)
-@USE_RUST_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/src/rust/target/release/@TOR_RUST_STATIC_NAME@
+am__DEPENDENCIES_1 =
+@USE_RUST_TRUE@am__DEPENDENCIES_2 =  \
+@USE_RUST_TRUE@	$(top_builddir)/$(TOR_RUST_LIB_PATH) \
+@USE_RUST_TRUE@	$(am__DEPENDENCIES_1)
 src_or_tor_DEPENDENCIES = src/or/libtor.a src/common/libor.a \
 	src/common/libor-ctime.a src/common/libor-crypto.a \
 	$(LIBKECCAK_TINY) $(LIBDONNA) src/common/libor-event.a \
 	src/trunnel/libor-trunnel.a src/trace/libor-trace.a \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_2)
 src_or_tor_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(src_or_tor_LDFLAGS) \
 	$(LDFLAGS) -o $@
 am__src_or_tor_cov_SOURCES_DIST = src/or/tor_main.c
@@ -877,361 +1025,429 @@ src_test_bench_DEPENDENCIES = src/or/lib
 	src/common/libor-ctime.a src/common/libor-crypto.a \
 	$(LIBKECCAK_TINY) $(LIBDONNA) src/common/libor-event.a \
 	src/trunnel/libor-trunnel.a src/trace/libor-trace.a \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_2)
 src_test_bench_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(src_test_bench_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_consensus_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_consensus-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_consensus-fuzz_consensus.$(OBJEXT)
+am__src_test_fuzz_fuzz_consensus_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_consensus.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_consensus_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_consensus-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_consensus-fuzz_consensus.$(OBJEXT)
 src_test_fuzz_fuzz_consensus_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_consensus_OBJECTS)
-am__DEPENDENCIES_2 = src/or/libtor-testing.a \
+am__DEPENDENCIES_3 = src/or/libtor-testing.a \
 	src/common/libor-crypto-testing.a $(LIBKECCAK_TINY) \
 	$(LIBDONNA) src/common/libor-testing.a \
 	src/common/libor-ctime-testing.a \
 	src/common/libor-event-testing.a \
-	src/trunnel/libor-trunnel-testing.a $(am__DEPENDENCIES_1)
-src_test_fuzz_fuzz_consensus_DEPENDENCIES = $(am__DEPENDENCIES_2)
+	src/trunnel/libor-trunnel-testing.a $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_consensus_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_consensus_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_consensus_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_consensus_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_descriptor_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_descriptor-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_descriptor-fuzz_descriptor.$(OBJEXT)
+am__src_test_fuzz_fuzz_descriptor_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_descriptor.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_descriptor_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_descriptor-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_descriptor-fuzz_descriptor.$(OBJEXT)
 src_test_fuzz_fuzz_descriptor_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_descriptor_OBJECTS)
-src_test_fuzz_fuzz_descriptor_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_descriptor_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_descriptor_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_descriptor_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_descriptor_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_diff_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_diff-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_diff-fuzz_diff.$(OBJEXT)
+am__src_test_fuzz_fuzz_diff_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_diff.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_diff_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_diff-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_diff-fuzz_diff.$(OBJEXT)
 src_test_fuzz_fuzz_diff_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_diff_OBJECTS)
-src_test_fuzz_fuzz_diff_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_diff_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_diff_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_diff_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_diff_apply_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_diff_apply-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_diff_apply-fuzz_diff_apply.$(OBJEXT)
+am__src_test_fuzz_fuzz_diff_apply_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_diff_apply.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_diff_apply_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_diff_apply-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_diff_apply-fuzz_diff_apply.$(OBJEXT)
 src_test_fuzz_fuzz_diff_apply_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_diff_apply_OBJECTS)
-src_test_fuzz_fuzz_diff_apply_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_apply_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_diff_apply_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_diff_apply_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_diff_apply_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_extrainfo_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_extrainfo-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_extrainfo-fuzz_extrainfo.$(OBJEXT)
+am__src_test_fuzz_fuzz_extrainfo_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_extrainfo.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_extrainfo_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_extrainfo-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_extrainfo-fuzz_extrainfo.$(OBJEXT)
 src_test_fuzz_fuzz_extrainfo_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_extrainfo_OBJECTS)
-src_test_fuzz_fuzz_extrainfo_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_extrainfo_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_extrainfo_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_extrainfo_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_extrainfo_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_hsdescv2_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_hsdescv2-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_hsdescv2-fuzz_hsdescv2.$(OBJEXT)
+am__src_test_fuzz_fuzz_hsdescv2_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_hsdescv2.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_hsdescv2_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_hsdescv2-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_hsdescv2-fuzz_hsdescv2.$(OBJEXT)
 src_test_fuzz_fuzz_hsdescv2_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_hsdescv2_OBJECTS)
-src_test_fuzz_fuzz_hsdescv2_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv2_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_hsdescv2_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_hsdescv2_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_hsdescv2_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_hsdescv3_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_hsdescv3-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_hsdescv3-fuzz_hsdescv3.$(OBJEXT)
+am__src_test_fuzz_fuzz_hsdescv3_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_hsdescv3.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_hsdescv3_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_hsdescv3-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_hsdescv3-fuzz_hsdescv3.$(OBJEXT)
 src_test_fuzz_fuzz_hsdescv3_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_hsdescv3_OBJECTS)
-src_test_fuzz_fuzz_hsdescv3_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv3_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_hsdescv3_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_hsdescv3_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_hsdescv3_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_http_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_http-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_http-fuzz_http.$(OBJEXT)
+am__src_test_fuzz_fuzz_http_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_http.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_http_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_http-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_http-fuzz_http.$(OBJEXT)
 src_test_fuzz_fuzz_http_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_http_OBJECTS)
-src_test_fuzz_fuzz_http_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_http_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_http_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_http_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_http_connect_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_http_connect-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_http_connect-fuzz_http_connect.$(OBJEXT)
+am__src_test_fuzz_fuzz_http_connect_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c \
+	src/test/fuzz/fuzz_http_connect.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_http_connect_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_http_connect-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_http_connect-fuzz_http_connect.$(OBJEXT)
 src_test_fuzz_fuzz_http_connect_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_http_connect_OBJECTS)
-src_test_fuzz_fuzz_http_connect_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_connect_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_http_connect_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_http_connect_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_http_connect_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_iptsv2_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_iptsv2-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_iptsv2-fuzz_iptsv2.$(OBJEXT)
+am__src_test_fuzz_fuzz_iptsv2_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_iptsv2.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_iptsv2_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_iptsv2-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_iptsv2-fuzz_iptsv2.$(OBJEXT)
 src_test_fuzz_fuzz_iptsv2_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_iptsv2_OBJECTS)
-src_test_fuzz_fuzz_iptsv2_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_iptsv2_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_iptsv2_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_iptsv2_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_iptsv2_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_microdesc_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_microdesc-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_microdesc-fuzz_microdesc.$(OBJEXT)
+am__src_test_fuzz_fuzz_microdesc_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_microdesc.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_microdesc_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_microdesc-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_microdesc-fuzz_microdesc.$(OBJEXT)
 src_test_fuzz_fuzz_microdesc_OBJECTS =  \
 	$(am_src_test_fuzz_fuzz_microdesc_OBJECTS)
-src_test_fuzz_fuzz_microdesc_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_microdesc_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_microdesc_LINK = $(CCLD) \
 	$(src_test_fuzz_fuzz_microdesc_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_fuzz_microdesc_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_fuzz_fuzz_vrs_OBJECTS =  \
-	src/test/fuzz/src_test_fuzz_fuzz_vrs-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_fuzz_vrs-fuzz_vrs.$(OBJEXT)
+am__src_test_fuzz_fuzz_vrs_SOURCES_DIST =  \
+	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_vrs.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_fuzz_vrs_OBJECTS = src/test/fuzz/src_test_fuzz_fuzz_vrs-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_fuzz_vrs-fuzz_vrs.$(OBJEXT)
 src_test_fuzz_fuzz_vrs_OBJECTS = $(am_src_test_fuzz_fuzz_vrs_OBJECTS)
-src_test_fuzz_fuzz_vrs_DEPENDENCIES = $(am__DEPENDENCIES_2)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_vrs_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_3)
 src_test_fuzz_fuzz_vrs_LINK = $(CCLD) $(src_test_fuzz_fuzz_vrs_CFLAGS) \
 	$(CFLAGS) $(src_test_fuzz_fuzz_vrs_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_consensus_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_consensus.c
-am__objects_36 = src/test/fuzz/src_test_fuzz_lf_fuzz_consensus-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_consensus-fuzz_consensus.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_consensus_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_36)
+@UNITTESTS_ENABLED_TRUE@am__objects_42 = src/test/fuzz/src_test_fuzz_lf_fuzz_consensus-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_consensus-fuzz_consensus.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_consensus_OBJECTS = $(am__objects_42)
 src_test_fuzz_lf_fuzz_consensus_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_consensus_OBJECTS)
-am__DEPENDENCIES_3 =
-am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+am__DEPENDENCIES_4 = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_consensus_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_consensus_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_consensus_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_descriptor_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_descriptor.c
-am__objects_37 = src/test/fuzz/src_test_fuzz_lf_fuzz_descriptor-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_descriptor-fuzz_descriptor.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_descriptor_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_37)
+@UNITTESTS_ENABLED_TRUE@am__objects_43 = src/test/fuzz/src_test_fuzz_lf_fuzz_descriptor-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_descriptor-fuzz_descriptor.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_descriptor_OBJECTS = $(am__objects_43)
 src_test_fuzz_lf_fuzz_descriptor_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_descriptor_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_descriptor_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_descriptor_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_descriptor_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_diff_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_diff.c
-am__objects_38 = src/test/fuzz/src_test_fuzz_lf_fuzz_diff-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_diff-fuzz_diff.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_diff_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_38)
+@UNITTESTS_ENABLED_TRUE@am__objects_44 = src/test/fuzz/src_test_fuzz_lf_fuzz_diff-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_diff-fuzz_diff.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_diff_OBJECTS = $(am__objects_44)
 src_test_fuzz_lf_fuzz_diff_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_diff_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_diff_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_diff_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_diff_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_diff_apply_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_diff_apply.c
-am__objects_39 = src/test/fuzz/src_test_fuzz_lf_fuzz_diff_apply-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_diff_apply-fuzz_diff_apply.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_diff_apply_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_39)
+@UNITTESTS_ENABLED_TRUE@am__objects_45 = src/test/fuzz/src_test_fuzz_lf_fuzz_diff_apply-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_diff_apply-fuzz_diff_apply.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_diff_apply_OBJECTS = $(am__objects_45)
 src_test_fuzz_lf_fuzz_diff_apply_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_diff_apply_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_diff_apply_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_diff_apply_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_diff_apply_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_extrainfo_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_extrainfo.c
-am__objects_40 = src/test/fuzz/src_test_fuzz_lf_fuzz_extrainfo-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_extrainfo-fuzz_extrainfo.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_extrainfo_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_40)
+@UNITTESTS_ENABLED_TRUE@am__objects_46 = src/test/fuzz/src_test_fuzz_lf_fuzz_extrainfo-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_extrainfo-fuzz_extrainfo.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_extrainfo_OBJECTS = $(am__objects_46)
 src_test_fuzz_lf_fuzz_extrainfo_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_extrainfo_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_extrainfo_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_extrainfo_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_extrainfo_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_hsdescv2_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_hsdescv2.c
-am__objects_41 = src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv2-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv2-fuzz_hsdescv2.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_hsdescv2_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_41)
+@UNITTESTS_ENABLED_TRUE@am__objects_47 = src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv2-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv2-fuzz_hsdescv2.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_hsdescv2_OBJECTS = $(am__objects_47)
 src_test_fuzz_lf_fuzz_hsdescv2_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_hsdescv2_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_hsdescv2_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_hsdescv2_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_hsdescv2_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_hsdescv3_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_hsdescv3.c
-am__objects_42 = src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv3-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv3-fuzz_hsdescv3.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_hsdescv3_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_42)
+@UNITTESTS_ENABLED_TRUE@am__objects_48 = src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv3-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_hsdescv3-fuzz_hsdescv3.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_hsdescv3_OBJECTS = $(am__objects_48)
 src_test_fuzz_lf_fuzz_hsdescv3_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_hsdescv3_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_hsdescv3_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_hsdescv3_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_hsdescv3_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_http_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_http.c
-am__objects_43 = src/test/fuzz/src_test_fuzz_lf_fuzz_http-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_http-fuzz_http.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_http_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_43)
+@UNITTESTS_ENABLED_TRUE@am__objects_49 = src/test/fuzz/src_test_fuzz_lf_fuzz_http-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_http-fuzz_http.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_http_OBJECTS = $(am__objects_49)
 src_test_fuzz_lf_fuzz_http_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_http_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_http_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_http_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_http_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_http_connect_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c \
 	src/test/fuzz/fuzz_http_connect.c
-am__objects_44 = src/test/fuzz/src_test_fuzz_lf_fuzz_http_connect-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_http_connect-fuzz_http_connect.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_http_connect_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_44)
+@UNITTESTS_ENABLED_TRUE@am__objects_50 = src/test/fuzz/src_test_fuzz_lf_fuzz_http_connect-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_http_connect-fuzz_http_connect.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_http_connect_OBJECTS = $(am__objects_50)
 src_test_fuzz_lf_fuzz_http_connect_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_http_connect_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_http_connect_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_http_connect_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_http_connect_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_iptsv2_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_iptsv2.c
-am__objects_45 = src/test/fuzz/src_test_fuzz_lf_fuzz_iptsv2-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_iptsv2-fuzz_iptsv2.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_iptsv2_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_45)
+@UNITTESTS_ENABLED_TRUE@am__objects_51 = src/test/fuzz/src_test_fuzz_lf_fuzz_iptsv2-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_iptsv2-fuzz_iptsv2.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_iptsv2_OBJECTS = $(am__objects_51)
 src_test_fuzz_lf_fuzz_iptsv2_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_iptsv2_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_iptsv2_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_iptsv2_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_iptsv2_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_microdesc_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_microdesc.c
-am__objects_46 = src/test/fuzz/src_test_fuzz_lf_fuzz_microdesc-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_microdesc-fuzz_microdesc.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_microdesc_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_46)
+@UNITTESTS_ENABLED_TRUE@am__objects_52 = src/test/fuzz/src_test_fuzz_lf_fuzz_microdesc-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_microdesc-fuzz_microdesc.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_microdesc_OBJECTS = $(am__objects_52)
 src_test_fuzz_lf_fuzz_microdesc_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_microdesc_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_microdesc_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_microdesc_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_microdesc_LDFLAGS) $(LDFLAGS) -o $@
 am__src_test_fuzz_lf_fuzz_vrs_SOURCES_DIST =  \
 	src/test/fuzz/fuzzing_common.c src/test/fuzz/fuzz_vrs.c
-am__objects_47 = src/test/fuzz/src_test_fuzz_lf_fuzz_vrs-fuzzing_common.$(OBJEXT) \
-	src/test/fuzz/src_test_fuzz_lf_fuzz_vrs-fuzz_vrs.$(OBJEXT)
-@LIBFUZZER_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_vrs_OBJECTS =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__objects_47)
+@UNITTESTS_ENABLED_TRUE@am__objects_53 = src/test/fuzz/src_test_fuzz_lf_fuzz_vrs-fuzzing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/src_test_fuzz_lf_fuzz_vrs-fuzz_vrs.$(OBJEXT)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@am_src_test_fuzz_lf_fuzz_vrs_OBJECTS = $(am__objects_53)
 src_test_fuzz_lf_fuzz_vrs_OBJECTS =  \
 	$(am_src_test_fuzz_lf_fuzz_vrs_OBJECTS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_DEPENDENCIES =  \
-@LIBFUZZER_ENABLED_TRUE@	$(am__DEPENDENCIES_4)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_DEPENDENCIES = $(am__DEPENDENCIES_4)
 src_test_fuzz_lf_fuzz_vrs_LINK = $(CCLD) \
 	$(src_test_fuzz_lf_fuzz_vrs_CFLAGS) $(CFLAGS) \
 	$(src_test_fuzz_lf_fuzz_vrs_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_test_OBJECTS =  \
-	src/test/src_test_test-log_test_helpers.$(OBJEXT) \
-	src/test/src_test_test-hs_test_helpers.$(OBJEXT) \
-	src/test/src_test_test-rend_test_helpers.$(OBJEXT) \
-	src/test/src_test_test-test.$(OBJEXT) \
-	src/test/src_test_test-test_accounting.$(OBJEXT) \
-	src/test/src_test_test-test_addr.$(OBJEXT) \
-	src/test/src_test_test-test_address.$(OBJEXT) \
-	src/test/src_test_test-test_address_set.$(OBJEXT) \
-	src/test/src_test_test-test_buffers.$(OBJEXT) \
-	src/test/src_test_test-test_cell_formats.$(OBJEXT) \
-	src/test/src_test_test-test_cell_queue.$(OBJEXT) \
-	src/test/src_test_test-test_channel.$(OBJEXT) \
-	src/test/src_test_test-test_channelpadding.$(OBJEXT) \
-	src/test/src_test_test-test_channeltls.$(OBJEXT) \
-	src/test/src_test_test-test_checkdir.$(OBJEXT) \
-	src/test/src_test_test-test_circuitlist.$(OBJEXT) \
-	src/test/src_test_test-test_circuitmux.$(OBJEXT) \
-	src/test/src_test_test-test_circuitbuild.$(OBJEXT) \
-	src/test/src_test_test-test_circuituse.$(OBJEXT) \
-	src/test/src_test_test-test_circuitstats.$(OBJEXT) \
-	src/test/src_test_test-test_compat_libevent.$(OBJEXT) \
-	src/test/src_test_test-test_config.$(OBJEXT) \
-	src/test/src_test_test-test_connection.$(OBJEXT) \
-	src/test/src_test_test-test_conscache.$(OBJEXT) \
-	src/test/src_test_test-test_consdiff.$(OBJEXT) \
-	src/test/src_test_test-test_consdiffmgr.$(OBJEXT) \
-	src/test/src_test_test-test_containers.$(OBJEXT) \
-	src/test/src_test_test-test_controller.$(OBJEXT) \
-	src/test/src_test_test-test_controller_events.$(OBJEXT) \
-	src/test/src_test_test-test_crypto.$(OBJEXT) \
-	src/test/src_test_test-test_crypto_openssl.$(OBJEXT) \
-	src/test/src_test_test-test_data.$(OBJEXT) \
-	src/test/src_test_test-test_dir.$(OBJEXT) \
-	src/test/src_test_test-test_dir_common.$(OBJEXT) \
-	src/test/src_test_test-test_dir_handle_get.$(OBJEXT) \
-	src/test/src_test_test-test_dos.$(OBJEXT) \
-	src/test/src_test_test-test_entryconn.$(OBJEXT) \
-	src/test/src_test_test-test_entrynodes.$(OBJEXT) \
-	src/test/src_test_test-test_guardfraction.$(OBJEXT) \
-	src/test/src_test_test-test_extorport.$(OBJEXT) \
-	src/test/src_test_test-test_hs.$(OBJEXT) \
-	src/test/src_test_test-test_hs_common.$(OBJEXT) \
-	src/test/src_test_test-test_hs_config.$(OBJEXT) \
-	src/test/src_test_test-test_hs_cell.$(OBJEXT) \
-	src/test/src_test_test-test_hs_ntor.$(OBJEXT) \
-	src/test/src_test_test-test_hs_service.$(OBJEXT) \
-	src/test/src_test_test-test_hs_client.$(OBJEXT) \
-	src/test/src_test_test-test_hs_intropoint.$(OBJEXT) \
-	src/test/src_test_test-test_hs_control.$(OBJEXT) \
-	src/test/src_test_test-test_handles.$(OBJEXT) \
-	src/test/src_test_test-test_hs_cache.$(OBJEXT) \
-	src/test/src_test_test-test_hs_descriptor.$(OBJEXT) \
-	src/test/src_test_test-test_introduce.$(OBJEXT) \
-	src/test/src_test_test-test_keypin.$(OBJEXT) \
-	src/test/src_test_test-test_link_handshake.$(OBJEXT) \
-	src/test/src_test_test-test_logging.$(OBJEXT) \
-	src/test/src_test_test-test_microdesc.$(OBJEXT) \
-	src/test/src_test_test-test_nodelist.$(OBJEXT) \
-	src/test/src_test_test-test_oom.$(OBJEXT) \
-	src/test/src_test_test-test_oos.$(OBJEXT) \
-	src/test/src_test_test-test_options.$(OBJEXT) \
-	src/test/src_test_test-test_policy.$(OBJEXT) \
-	src/test/src_test_test-test_procmon.$(OBJEXT) \
-	src/test/src_test_test-test_proto_http.$(OBJEXT) \
-	src/test/src_test_test-test_proto_misc.$(OBJEXT) \
-	src/test/src_test_test-test_protover.$(OBJEXT) \
-	src/test/src_test_test-test_pt.$(OBJEXT) \
-	src/test/src_test_test-test_pubsub.$(OBJEXT) \
-	src/test/src_test_test-test_relay.$(OBJEXT) \
-	src/test/src_test_test-test_relaycell.$(OBJEXT) \
-	src/test/src_test_test-test_rendcache.$(OBJEXT) \
-	src/test/src_test_test-test_replay.$(OBJEXT) \
-	src/test/src_test_test-test_router.$(OBJEXT) \
-	src/test/src_test_test-test_routerkeys.$(OBJEXT) \
-	src/test/src_test_test-test_routerlist.$(OBJEXT) \
-	src/test/src_test_test-test_routerset.$(OBJEXT) \
-	src/test/src_test_test-test_scheduler.$(OBJEXT) \
-	src/test/src_test_test-test_shared_random.$(OBJEXT) \
-	src/test/src_test_test-test_socks.$(OBJEXT) \
-	src/test/src_test_test-test_status.$(OBJEXT) \
-	src/test/src_test_test-test_storagedir.$(OBJEXT) \
-	src/test/src_test_test-test_threads.$(OBJEXT) \
-	src/test/src_test_test-test_tortls.$(OBJEXT) \
-	src/test/src_test_test-test_util.$(OBJEXT) \
-	src/test/src_test_test-test_util_format.$(OBJEXT) \
-	src/test/src_test_test-test_util_process.$(OBJEXT) \
-	src/test/src_test_test-test_helpers.$(OBJEXT) \
-	src/test/src_test_test-test_dns.$(OBJEXT) \
-	src/test/src_test_test-testing_common.$(OBJEXT) \
-	src/test/src_test_test-testing_rsakeys.$(OBJEXT) \
-	src/ext/src_test_test-tinytest.$(OBJEXT)
+am__src_test_test_SOURCES_DIST = src/test/log_test_helpers.c \
+	src/test/hs_test_helpers.c src/test/rend_test_helpers.c \
+	src/test/test.c src/test/test_accounting.c \
+	src/test/test_addr.c src/test/test_address.c \
+	src/test/test_address_set.c src/test/test_bridges.c \
+	src/test/test_buffers.c src/test/test_bwmgt.c \
+	src/test/test_cell_formats.c src/test/test_cell_queue.c \
+	src/test/test_channel.c src/test/test_channelpadding.c \
+	src/test/test_channeltls.c src/test/test_checkdir.c \
+	src/test/test_circuitlist.c src/test/test_circuitmux.c \
+	src/test/test_circuitbuild.c src/test/test_circuituse.c \
+	src/test/test_circuitstats.c src/test/test_compat_libevent.c \
+	src/test/test_config.c src/test/test_connection.c \
+	src/test/test_conscache.c src/test/test_consdiff.c \
+	src/test/test_consdiffmgr.c src/test/test_containers.c \
+	src/test/test_controller.c src/test/test_controller_events.c \
+	src/test/test_crypto.c src/test/test_crypto_openssl.c \
+	src/test/test_data.c src/test/test_dir.c \
+	src/test/test_dir_common.c src/test/test_dir_handle_get.c \
+	src/test/test_dos.c src/test/test_entryconn.c \
+	src/test/test_entrynodes.c src/test/test_geoip.c \
+	src/test/test_guardfraction.c src/test/test_extorport.c \
+	src/test/test_hs.c src/test/test_hs_common.c \
+	src/test/test_hs_config.c src/test/test_hs_cell.c \
+	src/test/test_hs_ntor.c src/test/test_hs_service.c \
+	src/test/test_hs_client.c src/test/test_hs_intropoint.c \
+	src/test/test_hs_control.c src/test/test_handles.c \
+	src/test/test_hs_cache.c src/test/test_hs_descriptor.c \
+	src/test/test_introduce.c src/test/test_keypin.c \
+	src/test/test_link_handshake.c src/test/test_logging.c \
+	src/test/test_mainloop.c src/test/test_microdesc.c \
+	src/test/test_nodelist.c src/test/test_oom.c \
+	src/test/test_oos.c src/test/test_options.c \
+	src/test/test_periodic_event.c src/test/test_policy.c \
+	src/test/test_procmon.c src/test/test_proto_http.c \
+	src/test/test_proto_misc.c src/test/test_protover.c \
+	src/test/test_pt.c src/test/test_pubsub.c \
+	src/test/test_relay.c src/test/test_relaycell.c \
+	src/test/test_relaycrypt.c src/test/test_rendcache.c \
+	src/test/test_replay.c src/test/test_router.c \
+	src/test/test_routerkeys.c src/test/test_routerlist.c \
+	src/test/test_routerset.c src/test/test_scheduler.c \
+	src/test/test_shared_random.c src/test/test_socks.c \
+	src/test/test_status.c src/test/test_storagedir.c \
+	src/test/test_threads.c src/test/test_tortls.c \
+	src/test/test_util.c src/test/test_util_format.c \
+	src/test/test_util_process.c src/test/test_voting_schedule.c \
+	src/test/test_helpers.c src/test/test_dns.c \
+	src/test/testing_common.c src/test/testing_rsakeys.c \
+	src/ext/tinytest.c
+@UNITTESTS_ENABLED_TRUE@am__objects_54 = src/test/src_test_test-log_test_helpers.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-hs_test_helpers.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-rend_test_helpers.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_accounting.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_addr.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_address.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_address_set.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_bridges.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_buffers.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_bwmgt.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_cell_formats.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_cell_queue.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_channel.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_channelpadding.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_channeltls.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_checkdir.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_circuitlist.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_circuitmux.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_circuitbuild.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_circuituse.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_circuitstats.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_compat_libevent.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_config.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_connection.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_conscache.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_consdiff.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_consdiffmgr.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_containers.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_controller.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_controller_events.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_crypto.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_crypto_openssl.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_data.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_dir.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_dir_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_dir_handle_get.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_dos.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_entryconn.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_entrynodes.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_geoip.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_guardfraction.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_extorport.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_config.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_cell.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_ntor.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_service.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_client.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_intropoint.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_control.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_handles.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_cache.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_hs_descriptor.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_introduce.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_keypin.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_link_handshake.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_logging.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_mainloop.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_microdesc.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_nodelist.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_oom.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_oos.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_options.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_periodic_event.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_policy.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_procmon.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_proto_http.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_proto_misc.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_protover.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_pt.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_pubsub.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_relay.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_relaycell.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_relaycrypt.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_rendcache.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_replay.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_router.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_routerkeys.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_routerlist.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_routerset.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_scheduler.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_shared_random.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_socks.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_status.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_storagedir.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_threads.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_tortls.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_util.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_util_format.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_util_process.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_voting_schedule.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_helpers.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-test_dns.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-testing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test-testing_rsakeys.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/ext/src_test_test-tinytest.$(OBJEXT)
+am_src_test_test_OBJECTS = $(am__objects_54)
 src_test_test_OBJECTS = $(am_src_test_test_OBJECTS)
 src_test_test_DEPENDENCIES = src/or/libtor-testing.a \
 	src/common/libor-crypto-testing.a $(LIBKECCAK_TINY) \
@@ -1239,15 +1455,17 @@ src_test_test_DEPENDENCIES = src/or/libt
 	src/common/libor-ctime-testing.a \
 	src/common/libor-event-testing.a \
 	src/trunnel/libor-trunnel-testing.a src/trace/libor-trace.a \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_2)
 src_test_test_LINK = $(CCLD) $(src_test_test_CFLAGS) $(CFLAGS) \
 	$(src_test_test_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_test_bt_cl_OBJECTS =  \
-	src/test/src_test_test_bt_cl-test_bt_cl.$(OBJEXT)
+am__src_test_test_bt_cl_SOURCES_DIST = src/test/test_bt_cl.c
+@UNITTESTS_ENABLED_TRUE@am_src_test_test_bt_cl_OBJECTS = src/test/src_test_test_bt_cl-test_bt_cl.$(OBJEXT)
 src_test_test_bt_cl_OBJECTS = $(am_src_test_test_bt_cl_OBJECTS)
-src_test_test_bt_cl_DEPENDENCIES = src/common/libor-testing.a \
-	src/common/libor-ctime-testing.a src/trace/libor-trace.a \
-	$(am__DEPENDENCIES_1)
+@UNITTESTS_ENABLED_TRUE@src_test_test_bt_cl_DEPENDENCIES =  \
+@UNITTESTS_ENABLED_TRUE@	src/common/libor-testing.a \
+@UNITTESTS_ENABLED_TRUE@	src/common/libor-ctime-testing.a \
+@UNITTESTS_ENABLED_TRUE@	src/trace/libor-trace.a \
+@UNITTESTS_ENABLED_TRUE@	$(am__DEPENDENCIES_2)
 src_test_test_bt_cl_LINK = $(CCLD) $(src_test_test_bt_cl_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 src_test_test_child_SOURCES = src/test/test-child.c
@@ -1271,7 +1489,7 @@ am__DEPENDENCIES_5 = src/or/libtor-testi
 	src/common/libor-ctime-testing.a \
 	src/common/libor-event-testing.a \
 	src/trunnel/libor-trunnel-testing.a src/trace/libor-trace.a \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_2)
 src_test_test_memwipe_DEPENDENCIES = $(am__DEPENDENCIES_5)
 src_test_test_memwipe_LINK = $(CCLD) $(src_test_test_memwipe_CFLAGS) \
 	$(CFLAGS) $(src_test_test_memwipe_LDFLAGS) $(LDFLAGS) -o $@
@@ -1280,16 +1498,20 @@ src_test_test_ntor_cl_OBJECTS = $(am_src
 src_test_test_ntor_cl_DEPENDENCIES = src/or/libtor.a \
 	src/common/libor.a src/common/libor-ctime.a \
 	src/common/libor-crypto.a $(LIBKECCAK_TINY) $(LIBDONNA) \
-	src/trace/libor-trace.a $(am__DEPENDENCIES_1)
+	src/trace/libor-trace.a $(am__DEPENDENCIES_2)
 src_test_test_ntor_cl_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(src_test_test_ntor_cl_LDFLAGS) $(LDFLAGS) -o $@
-am_src_test_test_slow_OBJECTS =  \
-	src/test/src_test_test_slow-test_slow.$(OBJEXT) \
-	src/test/src_test_test_slow-test_crypto_slow.$(OBJEXT) \
-	src/test/src_test_test_slow-test_util_slow.$(OBJEXT) \
-	src/test/src_test_test_slow-testing_common.$(OBJEXT) \
-	src/test/src_test_test_slow-testing_rsakeys.$(OBJEXT) \
-	src/ext/src_test_test_slow-tinytest.$(OBJEXT)
+am__src_test_test_slow_SOURCES_DIST = src/test/test_slow.c \
+	src/test/test_crypto_slow.c src/test/test_util_slow.c \
+	src/test/testing_common.c src/test/testing_rsakeys.c \
+	src/ext/tinytest.c
+@UNITTESTS_ENABLED_TRUE@am__objects_55 = src/test/src_test_test_slow-test_slow.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test_slow-test_crypto_slow.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test_slow-test_util_slow.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test_slow-testing_common.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/test/src_test_test_slow-testing_rsakeys.$(OBJEXT) \
+@UNITTESTS_ENABLED_TRUE@	src/ext/src_test_test_slow-tinytest.$(OBJEXT)
+am_src_test_test_slow_OBJECTS = $(am__objects_55)
 src_test_test_slow_OBJECTS = $(am_src_test_test_slow_OBJECTS)
 src_test_test_slow_DEPENDENCIES = $(am__DEPENDENCIES_5)
 src_test_test_slow_LINK = $(CCLD) $(src_test_test_slow_CFLAGS) \
@@ -1299,7 +1521,7 @@ am_src_test_test_switch_id_OBJECTS =  \
 src_test_test_switch_id_OBJECTS =  \
 	$(am_src_test_test_switch_id_OBJECTS)
 src_test_test_switch_id_DEPENDENCIES = src/common/libor-testing.a \
-	src/common/libor-ctime-testing.a $(am__DEPENDENCIES_1)
+	src/common/libor-ctime-testing.a $(am__DEPENDENCIES_2)
 src_test_test_switch_id_LINK = $(CCLD) \
 	$(src_test_test_switch_id_CFLAGS) $(CFLAGS) \
 	$(src_test_test_switch_id_LDFLAGS) $(LDFLAGS) -o $@
@@ -1310,7 +1532,7 @@ src_test_test_timers_DEPENDENCIES = src/
 	src/common/libor-ctime-testing.a \
 	src/common/libor-event-testing.a \
 	src/common/libor-crypto-testing.a $(LIBKECCAK_TINY) \
-	$(LIBDONNA) $(am__DEPENDENCIES_1)
+	$(LIBDONNA) $(am__DEPENDENCIES_2)
 src_test_test_timers_LINK = $(CCLD) $(src_test_test_timers_CFLAGS) \
 	$(CFLAGS) $(src_test_test_timers_LDFLAGS) $(LDFLAGS) -o $@
 am_src_test_test_workqueue_OBJECTS =  \
@@ -1321,7 +1543,7 @@ src_test_test_workqueue_DEPENDENCIES = s
 	src/common/libor-testing.a src/common/libor-ctime-testing.a \
 	src/common/libor-crypto-testing.a $(LIBKECCAK_TINY) \
 	$(LIBDONNA) src/common/libor-event-testing.a \
-	src/trace/libor-trace.a $(am__DEPENDENCIES_1)
+	src/trace/libor-trace.a $(am__DEPENDENCIES_2)
 src_test_test_workqueue_LINK = $(CCLD) \
 	$(src_test_test_workqueue_CFLAGS) $(CFLAGS) \
 	$(src_test_test_workqueue_LDFLAGS) $(LDFLAGS) -o $@
@@ -1351,13 +1573,13 @@ am_src_tools_tor_gencert_OBJECTS = src/t
 src_tools_tor_gencert_OBJECTS = $(am_src_tools_tor_gencert_OBJECTS)
 src_tools_tor_gencert_DEPENDENCIES = src/common/libor.a \
 	src/common/libor-crypto.a src/common/libor-ctime.a \
-	$(LIBKECCAK_TINY) $(LIBDONNA) $(am__DEPENDENCIES_1)
+	$(LIBKECCAK_TINY) $(LIBDONNA) $(am__DEPENDENCIES_2)
 src_tools_tor_gencert_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(src_tools_tor_gencert_LDFLAGS) $(LDFLAGS) -o $@
 am_src_tools_tor_resolve_OBJECTS = src/tools/tor-resolve.$(OBJEXT)
 src_tools_tor_resolve_OBJECTS = $(am_src_tools_tor_resolve_OBJECTS)
 src_tools_tor_resolve_DEPENDENCIES = src/common/libor.a \
-	src/common/libor-ctime.a $(am__DEPENDENCIES_1)
+	src/common/libor-ctime.a $(am__DEPENDENCIES_2)
 src_tools_tor_resolve_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(src_tools_tor_resolve_LDFLAGS) $(LDFLAGS) -o $@
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -1486,11 +1708,11 @@ SOURCES = $(src_common_libcurve25519_don
 	$(src_tools_tor_gencert_SOURCES) \
 	$(src_tools_tor_resolve_SOURCES)
 DIST_SOURCES = $(am__src_common_libcurve25519_donna_a_SOURCES_DIST) \
-	$(src_common_libor_crypto_testing_a_SOURCES) \
+	$(am__src_common_libor_crypto_testing_a_SOURCES_DIST) \
 	$(src_common_libor_crypto_a_SOURCES) \
 	$(am__src_common_libor_ctime_testing_a_SOURCES_DIST) \
 	$(am__src_common_libor_ctime_a_SOURCES_DIST) \
-	$(src_common_libor_event_testing_a_SOURCES) \
+	$(am__src_common_libor_event_testing_a_SOURCES_DIST) \
 	$(src_common_libor_event_a_SOURCES) \
 	$(am__src_common_libor_testing_a_SOURCES_DIST) \
 	$(am__src_common_libor_a_SOURCES_DIST) \
@@ -1513,21 +1735,21 @@ DIST_SOURCES = $(am__src_common_libcurve
 	$(am__src_test_fuzz_liboss_fuzz_vrs_a_SOURCES_DIST) \
 	$(am__src_tools_libtorrunner_a_SOURCES_DIST) \
 	$(src_trace_libor_trace_a_SOURCES) \
-	$(src_trunnel_libor_trunnel_testing_a_SOURCES) \
+	$(am__src_trunnel_libor_trunnel_testing_a_SOURCES_DIST) \
 	$(src_trunnel_libor_trunnel_a_SOURCES) $(src_or_tor_SOURCES) \
 	$(am__src_or_tor_cov_SOURCES_DIST) $(src_test_bench_SOURCES) \
-	$(src_test_fuzz_fuzz_consensus_SOURCES) \
-	$(src_test_fuzz_fuzz_descriptor_SOURCES) \
-	$(src_test_fuzz_fuzz_diff_SOURCES) \
-	$(src_test_fuzz_fuzz_diff_apply_SOURCES) \
-	$(src_test_fuzz_fuzz_extrainfo_SOURCES) \
-	$(src_test_fuzz_fuzz_hsdescv2_SOURCES) \
-	$(src_test_fuzz_fuzz_hsdescv3_SOURCES) \
-	$(src_test_fuzz_fuzz_http_SOURCES) \
-	$(src_test_fuzz_fuzz_http_connect_SOURCES) \
-	$(src_test_fuzz_fuzz_iptsv2_SOURCES) \
-	$(src_test_fuzz_fuzz_microdesc_SOURCES) \
-	$(src_test_fuzz_fuzz_vrs_SOURCES) \
+	$(am__src_test_fuzz_fuzz_consensus_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_descriptor_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_diff_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_diff_apply_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_extrainfo_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_hsdescv2_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_hsdescv3_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_http_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_http_connect_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_iptsv2_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_microdesc_SOURCES_DIST) \
+	$(am__src_test_fuzz_fuzz_vrs_SOURCES_DIST) \
 	$(am__src_test_fuzz_lf_fuzz_consensus_SOURCES_DIST) \
 	$(am__src_test_fuzz_lf_fuzz_descriptor_SOURCES_DIST) \
 	$(am__src_test_fuzz_lf_fuzz_diff_SOURCES_DIST) \
@@ -1540,10 +1762,12 @@ DIST_SOURCES = $(am__src_common_libcurve
 	$(am__src_test_fuzz_lf_fuzz_iptsv2_SOURCES_DIST) \
 	$(am__src_test_fuzz_lf_fuzz_microdesc_SOURCES_DIST) \
 	$(am__src_test_fuzz_lf_fuzz_vrs_SOURCES_DIST) \
-	$(src_test_test_SOURCES) $(src_test_test_bt_cl_SOURCES) \
-	src/test/test-child.c $(src_test_test_hs_ntor_cl_SOURCES) \
+	$(am__src_test_test_SOURCES_DIST) \
+	$(am__src_test_test_bt_cl_SOURCES_DIST) src/test/test-child.c \
+	$(src_test_test_hs_ntor_cl_SOURCES) \
 	$(src_test_test_memwipe_SOURCES) \
-	$(src_test_test_ntor_cl_SOURCES) $(src_test_test_slow_SOURCES) \
+	$(src_test_test_ntor_cl_SOURCES) \
+	$(am__src_test_test_slow_SOURCES_DIST) \
 	$(src_test_test_switch_id_SOURCES) \
 	$(src_test_test_timers_SOURCES) \
 	$(src_test_test_workqueue_SOURCES) \
@@ -1631,16 +1855,18 @@ am__noinst_HEADERS_DIST = src/ext/ht.h s
 	src/common/compress_none.h src/common/compress_zlib.h \
 	src/common/compress_zstd.h src/common/confline.h \
 	src/common/container.h src/common/crypto.h \
-	src/common/crypto_curve25519.h src/common/crypto_ed25519.h \
-	src/common/crypto_format.h src/common/crypto_openssl_mgt.h \
-	src/common/crypto_rsa.h src/common/crypto_pwbox.h \
-	src/common/crypto_s2k.h src/common/di_ops.h \
-	src/common/handles.h src/common/memarea.h \
+	src/common/crypto_digest.h src/common/crypto_curve25519.h \
+	src/common/crypto_ed25519.h src/common/crypto_format.h \
+	src/common/crypto_openssl_mgt.h src/common/crypto_pwbox.h \
+	src/common/crypto_rand.h src/common/crypto_rsa.h \
+	src/common/crypto_s2k.h src/common/crypto_util.h \
+	src/common/di_ops.h src/common/handles.h src/common/memarea.h \
 	src/common/linux_syscalls.inc src/common/procmon.h \
 	src/common/pubsub.h src/common/sandbox.h \
 	src/common/storagedir.h src/common/testsupport.h \
-	src/common/timers.h src/common/torint.h src/common/torlog.h \
-	src/common/tortls.h src/common/util.h src/common/util_bug.h \
+	src/common/timers.h src/common/token_bucket.h \
+	src/common/torint.h src/common/torlog.h src/common/tortls.h \
+	src/common/util.h src/common/util_bug.h \
 	src/common/util_format.h src/common/util_process.h \
 	src/common/workqueue.h src/or/tor_api.h src/or/addressmap.h \
 	src/or/auth_dirs.inc src/or/bridges.h src/or/channel.h \
@@ -1652,37 +1878,39 @@ am__noinst_HEADERS_DIST = src/ext/ht.h s
 	src/or/confparse.h src/or/connection.h \
 	src/or/connection_edge.h src/or/connection_or.h \
 	src/or/conscache.h src/or/consdiff.h src/or/consdiffmgr.h \
-	src/or/control.h src/or/cpuworker.h src/or/dircollate.h \
-	src/or/directory.h src/or/dirserv.h src/or/dirvote.h \
-	src/or/dns.h src/or/dns_structs.h src/or/dnsserv.h \
-	src/or/dos.h src/or/ext_orport.h src/or/fallback_dirs.inc \
-	src/or/fp_pair.h src/or/geoip.h src/or/entrynodes.h \
-	src/or/git_revision.h src/or/hibernate.h src/or/hs_cache.h \
-	src/or/hs_cell.h src/or/hs_circuit.h src/or/hs_circuitmap.h \
-	src/or/hs_client.h src/or/hs_common.h src/or/hs_config.h \
-	src/or/hs_control.h src/or/hs_descriptor.h src/or/hs_ident.h \
-	src/or/hs_intropoint.h src/or/hs_ntor.h src/or/hs_stats.h \
-	src/or/hs_service.h src/or/keypin.h src/or/main.h \
-	src/or/microdesc.h src/or/networkstatus.h src/or/nodelist.h \
-	src/or/ntmain.h src/or/onion.h src/or/onion_fast.h \
-	src/or/onion_ntor.h src/or/onion_tap.h src/or/or.h \
-	src/or/shared_random.h src/or/shared_random_state.h \
-	src/or/transports.h src/or/parsecommon.h src/or/periodic.h \
-	src/or/policies.h src/or/protover.h src/or/proto_cell.h \
-	src/or/proto_control0.h src/or/proto_ext_or.h \
-	src/or/proto_http.h src/or/proto_socks.h src/or/reasons.h \
-	src/or/relay.h src/or/rendcache.h src/or/rendclient.h \
-	src/or/rendcommon.h src/or/rendmid.h src/or/rendservice.h \
-	src/or/rephist.h src/or/replaycache.h src/or/router.h \
-	src/or/routerkeys.h src/or/routerlist.h src/or/routerset.h \
-	src/or/routerparse.h src/or/scheduler.h src/or/statefile.h \
-	src/or/status.h src/or/torcert.h src/or/tor_api_internal.h \
-	micro-revision.i src/test/fakechans.h \
-	src/test/hs_test_helpers.h src/test/log_test_helpers.h \
-	src/test/rend_test_helpers.h src/test/test.h \
-	src/test/test_helpers.h src/test/test_dir_common.h \
-	src/test/test_connection.h src/test/test_descriptors.inc \
-	src/test/example_extrainfo.inc \
+	src/or/control.h src/or/cpuworker.h src/or/directory.h \
+	src/or/dirserv.h src/or/dns.h src/or/dns_structs.h \
+	src/or/dnsserv.h src/or/dos.h src/or/ext_orport.h \
+	src/or/fallback_dirs.inc src/or/fp_pair.h src/or/geoip.h \
+	src/or/entrynodes.h src/or/git_revision.h src/or/hibernate.h \
+	src/or/hs_cache.h src/or/hs_cell.h src/or/hs_circuit.h \
+	src/or/hs_circuitmap.h src/or/hs_client.h src/or/hs_common.h \
+	src/or/hs_config.h src/or/hs_control.h src/or/hs_descriptor.h \
+	src/or/hs_ident.h src/or/hs_intropoint.h src/or/hs_ntor.h \
+	src/or/hs_stats.h src/or/hs_service.h src/or/keypin.h \
+	src/or/main.h src/or/microdesc.h src/or/networkstatus.h \
+	src/or/nodelist.h src/or/ntmain.h src/or/onion.h \
+	src/or/onion_fast.h src/or/onion_ntor.h src/or/onion_tap.h \
+	src/or/or.h src/or/transports.h src/or/parsecommon.h \
+	src/or/periodic.h src/or/policies.h src/or/protover.h \
+	src/or/proto_cell.h src/or/proto_control0.h \
+	src/or/proto_ext_or.h src/or/proto_http.h src/or/proto_socks.h \
+	src/or/reasons.h src/or/relay.h src/or/relay_crypto.h \
+	src/or/rendcache.h src/or/rendclient.h src/or/rendcommon.h \
+	src/or/rendmid.h src/or/rendservice.h src/or/rephist.h \
+	src/or/replaycache.h src/or/router.h src/or/routerkeys.h \
+	src/or/routerlist.h src/or/routerset.h src/or/routerparse.h \
+	src/or/scheduler.h src/or/shared_random_client.h \
+	src/or/statefile.h src/or/status.h src/or/torcert.h \
+	src/or/tor_api_internal.h src/or/voting_schedule.h \
+	src/or/dirauth/dircollate.h src/or/dirauth/dirvote.h \
+	src/or/dirauth/mode.h src/or/dirauth/shared_random.h \
+	src/or/dirauth/shared_random_state.h micro-revision.i \
+	src/test/fakechans.h src/test/hs_test_helpers.h \
+	src/test/log_test_helpers.h src/test/rend_test_helpers.h \
+	src/test/test.h src/test/test_helpers.h \
+	src/test/test_dir_common.h src/test/test_connection.h \
+	src/test/test_descriptors.inc src/test/example_extrainfo.inc \
 	src/test/failing_routerdescs.inc src/test/ed25519_vectors.inc \
 	src/test/test_hs_descriptor.inc src/test/vote_descriptors.inc \
 	src/test/fuzz/fuzzing.h src/trace/trace.h src/trace/events.h \
@@ -1886,6 +2114,31 @@ TEST_LOGS = $(am__test_logs2:.test.log=.
 TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
 TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
 	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.in \
+	$(srcdir)/config.rust.in $(srcdir)/contrib/include.am \
+	$(srcdir)/doc/include.am $(srcdir)/link_rust.sh.in \
+	$(srcdir)/orconfig.h.in $(srcdir)/src/common/include.am \
+	$(srcdir)/src/config/include.am $(srcdir)/src/ext/include.am \
+	$(srcdir)/src/include.am $(srcdir)/src/or/include.am \
+	$(srcdir)/src/rust/include.am \
+	$(srcdir)/src/rust/tor_rust/include.am \
+	$(srcdir)/src/test/fuzz/include.am \
+	$(srcdir)/src/test/include.am $(srcdir)/src/tools/include.am \
+	$(srcdir)/src/trace/include.am \
+	$(srcdir)/src/trunnel/include.am \
+	$(srcdir)/src/win32/include.am \
+	$(top_srcdir)/contrib/dist/suse/tor.sh.in \
+	$(top_srcdir)/contrib/dist/tor.service.in \
+	$(top_srcdir)/contrib/dist/tor.sh.in \
+	$(top_srcdir)/contrib/dist/torctl.in \
+	$(top_srcdir)/contrib/operator-tools/tor.logrotate.in \
+	$(top_srcdir)/scripts/maint/checkOptionDocs.pl.in \
+	$(top_srcdir)/scripts/maint/updateVersions.pl.in \
+	$(top_srcdir)/src/config/torrc.minimal.in \
+	$(top_srcdir)/src/config/torrc.sample.in \
+	$(top_srcdir)/src/rust/.cargo/config.in ChangeLog INSTALL \
+	README ar-lib compile config.guess config.sub depcomp \
+	install-sh missing test-driver
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -1970,6 +2223,9 @@ PYTHON = @PYTHON@
 RANLIB = @RANLIB@
 RUSTC = @RUSTC@
 RUST_DL = @RUST_DL@
+RUST_LINKER_OPTIONS = @RUST_LINKER_OPTIONS@
+RUST_TARGET_PROP = @RUST_TARGET_PROP@
+RUST_WARN = @RUST_WARN@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -1992,10 +2248,12 @@ TOR_LIB_USERENV = @TOR_LIB_USERENV@
 TOR_LIB_WS32 = @TOR_LIB_WS32@
 TOR_LZMA_CFLAGS = @TOR_LZMA_CFLAGS@
 TOR_LZMA_LIBS = @TOR_LZMA_LIBS@
+TOR_MODULES_ALL_ENABLED = @TOR_MODULES_ALL_ENABLED@
 TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@
 TOR_RUST_DEPENDENCIES = @TOR_RUST_DEPENDENCIES@
 TOR_RUST_EXTRA_LIBS = @TOR_RUST_EXTRA_LIBS@
-TOR_RUST_STATIC_NAME = @TOR_RUST_STATIC_NAME@
+TOR_RUST_LIB_PATH = @TOR_RUST_LIB_PATH@
+TOR_RUST_TARGET = @TOR_RUST_TARGET@
 TOR_SYSTEMD_CFLAGS = @TOR_SYSTEMD_CFLAGS@
 TOR_SYSTEMD_LIBS = @TOR_SYSTEMD_LIBS@
 TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@
@@ -2062,7 +2320,7 @@ noinst_LIBRARIES = $(LIBED25519_REF10) $
 	src/common/libor.a src/common/libor-ctime.a \
 	src/common/libor-crypto.a src/common/libor-event.a \
 	$(am__append_2) $(am__append_4) $(am__append_6) \
-	src/or/libtor.a $(am__append_7) $(am__append_13) \
+	src/or/libtor.a $(am__append_7) $(am__append_18) \
 	$(OSS_FUZZ_FUZZERS) src/trace/libor-trace.a
 EXTRA_DIST = src/ext/README src/ext/timeouts/bench/bench-add.lua \
 	src/ext/timeouts/bench/bench-aux.lua \
@@ -2079,9 +2337,14 @@ EXTRA_DIST = src/ext/README src/ext/time
 	src/ext/timeouts/Rules.shrc src/ext/timeouts/test-timeout.c \
 	src/trunnel/README src/common/Makefile.nmake src/or/ntmain.c \
 	src/or/Makefile.nmake src/rust/tor_rust/Cargo.toml \
-	src/rust/tor_rust/lib.rs src/rust/Cargo.toml \
+	src/rust/tor_rust/lib.rs src/rust/build.rs src/rust/Cargo.toml \
 	src/rust/Cargo.lock src/rust/.cargo/config.in \
-	src/rust/external/Cargo.toml src/rust/external/external.rs \
+	src/rust/crypto/Cargo.toml src/rust/crypto/lib.rs \
+	src/rust/crypto/digests/mod.rs src/rust/crypto/digests/sha2.rs \
+	src/rust/crypto/rand/mod.rs src/rust/crypto/rand/rng.rs \
+	src/rust/external/Cargo.toml \
+	src/rust/external/crypto_digest.rs \
+	src/rust/external/crypto_rand.rs src/rust/external/external.rs \
 	src/rust/external/lib.rs src/rust/protover/Cargo.toml \
 	src/rust/protover/errors.rs src/rust/protover/protoset.rs \
 	src/rust/protover/ffi.rs src/rust/protover/lib.rs \
@@ -2091,15 +2354,17 @@ EXTRA_DIST = src/ext/README src/ext/time
 	src/rust/smartlist/smartlist.rs \
 	src/rust/tor_allocate/Cargo.toml src/rust/tor_allocate/lib.rs \
 	src/rust/tor_allocate/tor_allocate.rs \
-	src/rust/tor_rust/Cargo.toml src/rust/tor_rust/include.am \
-	src/rust/tor_rust/lib.rs src/rust/tor_util/Cargo.toml \
-	src/rust/tor_util/ffi.rs src/rust/tor_util/lib.rs \
-	src/rust/tor_util/strings.rs src/test/bt_test.py \
-	src/test/ntor_ref.py src/test/hs_ntor_ref.py \
-	src/test/hs_build_address.py src/test/hs_indexes.py \
-	src/test/fuzz_static_testcases.sh \
+	src/rust/tor_log/Cargo.toml src/rust/tor_log/lib.rs \
+	src/rust/tor_log/tor_log.rs src/rust/tor_rust/Cargo.toml \
+	src/rust/tor_rust/include.am src/rust/tor_rust/lib.rs \
+	src/rust/tor_util/Cargo.toml src/rust/tor_util/ffi.rs \
+	src/rust/tor_util/lib.rs src/rust/tor_util/strings.rs \
+	src/test/bt_test.py src/test/ntor_ref.py \
+	src/test/hs_ntor_ref.py src/test/hs_build_address.py \
+	src/test/hs_indexes.py src/test/fuzz_static_testcases.sh \
 	src/test/slownacl_curve25519.py src/test/zero_length_keys.sh \
-	src/test/test_keygen.sh src/test/test_key_expiration.sh \
+	src/test/rust_supp.txt src/test/test_keygen.sh \
+	src/test/test_key_expiration.sh \
 	src/test/test_zero_length_keys.sh src/test/test_ntor.sh \
 	src/test/test_hs_ntor.sh src/test/test_bt.sh \
 	src/test/test-network.sh src/test/test_rust.sh \
@@ -2107,15 +2372,17 @@ EXTRA_DIST = src/ext/README src/ext/time
 	src/test/test_workqueue_efd.sh src/test/test_workqueue_efd2.sh \
 	src/test/test_workqueue_pipe.sh \
 	src/test/test_workqueue_pipe2.sh \
-	src/test/test_workqueue_socketpair.sh \
-	src/tools/tor-fw-helper/README src/win32/orconfig.h \
+	src/test/test_workqueue_socketpair.sh src/win32/orconfig.h \
 	src/config/geoip src/config/geoip6 src/config/torrc.minimal.in \
 	src/config/torrc.sample.in src/config/README \
 	doc/asciidoc-helper.sh $(html_in) $(man_in) $(txt_in) \
 	doc/state-contents.txt doc/torrc_format.txt doc/TUNING \
 	doc/HACKING/README.1st.md doc/HACKING/CodingStandards.md \
-	doc/HACKING/GettingStarted.md doc/HACKING/HelpfulTools.md \
-	doc/HACKING/HowToReview.md doc/HACKING/ReleasingTor.md \
+	doc/HACKING/CodingStandardsRust.md doc/HACKING/Fuzzing.md \
+	doc/HACKING/GettingStarted.md \
+	doc/HACKING/GettingStartedRust.md doc/HACKING/HelpfulTools.md \
+	doc/HACKING/HowToReview.md doc/HACKING/Module.md \
+	doc/HACKING/ReleasingTor.md doc/HACKING/Tracing.md \
 	doc/HACKING/WritingTests.md contrib/README \
 	contrib/client-tools/torify contrib/dist/rc.subr \
 	contrib/dist/suse/tor.sh.in contrib/dist/tor.sh \
@@ -2125,8 +2392,9 @@ EXTRA_DIST = src/ext/README src/ext/time
 	contrib/or-tools/exitlist \
 	contrib/win32build/package_nsis-mingw.sh \
 	contrib/win32build/tor-mingw.nsi.in contrib/win32build/tor.ico \
-	contrib/win32build/tor.nsi.in ChangeLog INSTALL LICENSE \
-	Makefile.nmake README ReleaseNotes scripts/maint/checkSpace.pl
+	contrib/win32build/tor.nsi.in ChangeLog CONTRIBUTING INSTALL \
+	LICENSE Makefile.nmake README ReleaseNotes \
+	scripts/maint/checkSpace.pl
 
 # This may someday want to be an installed file?
 noinst_HEADERS = $(EXTHEADERS) $(ED25519_REF10_HDRS) \
@@ -2162,8 +2430,8 @@ AM_CFLAGS = @TOR_SYSTEMD_CFLAGS@ @CFLAGS
 @COVERAGE_ENABLED_FALSE@TESTING_TOR_BINARY = $(top_builddir)/src/or/tor$(EXEEXT)
 @COVERAGE_ENABLED_TRUE@TESTING_TOR_BINARY = $(top_builddir)/src/or/tor-cov$(EXEEXT)
 @USE_RUST_FALSE@rust_ldadd = 
-@USE_RUST_TRUE@rust_ldadd = $(top_builddir)/src/rust/target/release/@TOR_RUST_STATIC_NAME@ \
-@USE_RUST_TRUE@	@TOR_RUST_EXTRA_LIBS@
+@USE_RUST_TRUE@rust_ldadd = $(top_builddir)/$(TOR_RUST_LIB_PATH) \
+@USE_RUST_TRUE@	$(TOR_RUST_EXTRA_LIBS)
 
 EXTHEADERS = \
   src/ext/ht.h		\
@@ -2336,7 +2604,8 @@ TRUNNELHEADERS = \
 
 src_trunnel_libor_trunnel_a_SOURCES = $(TRUNNELSOURCES)
 src_trunnel_libor_trunnel_a_CPPFLAGS = -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS)
-src_trunnel_libor_trunnel_testing_a_SOURCES = $(TRUNNELSOURCES)
+@UNITTESTS_ENABLED_FALSE@src_trunnel_libor_trunnel_testing_a_SOURCES = 
+@UNITTESTS_ENABLED_TRUE@src_trunnel_libor_trunnel_testing_a_SOURCES = $(TRUNNELSOURCES)
 src_trunnel_libor_trunnel_testing_a_CPPFLAGS = -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_trunnel_libor_trunnel_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
 @USE_OPENBSD_MALLOC_FALSE@libor_extra_source = 
@@ -2370,7 +2639,8 @@ LIBOR_CTIME_A_SRC = \
    src/common/di_ops.c
 
 src_common_libor_ctime_a_SOURCES = $(LIBOR_CTIME_A_SRC)
-src_common_libor_ctime_testing_a_SOURCES = $(LIBOR_CTIME_A_SRC)
+@UNITTESTS_ENABLED_FALSE@src_common_libor_ctime_testing_a_SOURCES = 
+@UNITTESTS_ENABLED_TRUE@src_common_libor_ctime_testing_a_SOURCES = $(LIBOR_CTIME_A_SRC)
 src_common_libor_ctime_a_CFLAGS = @CFLAGS_CONSTTIME@
 src_common_libor_ctime_testing_a_CFLAGS = @CFLAGS_CONSTTIME@ $(TEST_CFLAGS)
 LIBOR_A_SRC = \
@@ -2392,6 +2662,7 @@ LIBOR_A_SRC = \
   src/common/util_process.c				\
   src/common/sandbox.c					\
   src/common/storagedir.c				\
+  src/common/token_bucket.c				\
   src/common/workqueue.c				\
   $(libor_extra_source)					\
   $(threads_impl_source)				\
@@ -2406,11 +2677,14 @@ LIBOR_CRYPTO_A_SRC = \
   src/common/compress_zlib.c	\
   src/common/compress_zstd.c	\
   src/common/crypto.c		\
-  src/common/crypto_rsa.c     \
+  src/common/crypto_digest.c     \
+  src/common/crypto_format.c	\
   src/common/crypto_openssl_mgt.c    \
   src/common/crypto_pwbox.c     \
+  src/common/crypto_rand.c     \
+  src/common/crypto_rsa.c     \
   src/common/crypto_s2k.c	\
-  src/common/crypto_format.c	\
+  src/common/crypto_util.c	\
   src/common/tortls.c		\
   src/common/crypto_curve25519.c \
   src/common/crypto_ed25519.c
@@ -2424,9 +2698,12 @@ LIBOR_EVENT_A_SRC = \
 src_common_libor_a_SOURCES = $(LIBOR_A_SRC)
 src_common_libor_crypto_a_SOURCES = $(LIBOR_CRYPTO_A_SRC)
 src_common_libor_event_a_SOURCES = $(LIBOR_EVENT_A_SRC)
-src_common_libor_testing_a_SOURCES = $(LIBOR_A_SRC)
-src_common_libor_crypto_testing_a_SOURCES = $(LIBOR_CRYPTO_A_SRC)
-src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SRC)
+@UNITTESTS_ENABLED_FALSE@src_common_libor_testing_a_SOURCES = 
+@UNITTESTS_ENABLED_TRUE@src_common_libor_testing_a_SOURCES = $(LIBOR_A_SRC)
+@UNITTESTS_ENABLED_FALSE@src_common_libor_crypto_testing_a_SOURCES = 
+@UNITTESTS_ENABLED_TRUE@src_common_libor_crypto_testing_a_SOURCES = $(LIBOR_CRYPTO_A_SRC)
+@UNITTESTS_ENABLED_FALSE@src_common_libor_event_testing_a_SOURCES = 
+@UNITTESTS_ENABLED_TRUE@src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SRC)
 src_common_libor_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_common_libor_crypto_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_common_libor_event_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
@@ -2454,13 +2731,16 @@ COMMONHEADERS = \
   src/common/confline.h				\
   src/common/container.h			\
   src/common/crypto.h				\
+  src/common/crypto_digest.h            \
   src/common/crypto_curve25519.h		\
   src/common/crypto_ed25519.h			\
   src/common/crypto_format.h			\
   src/common/crypto_openssl_mgt.h         \
-  src/common/crypto_rsa.h           \
   src/common/crypto_pwbox.h			\
+  src/common/crypto_rand.h          \
+  src/common/crypto_rsa.h           \
   src/common/crypto_s2k.h			\
+  src/common/crypto_util.h			\
   src/common/di_ops.h				\
   src/common/handles.h				\
   src/common/memarea.h				\
@@ -2471,6 +2751,7 @@ COMMONHEADERS = \
   src/common/storagedir.h			\
   src/common/testsupport.h			\
   src/common/timers.h				\
+  src/common/token_bucket.h			\
   src/common/torint.h				\
   src/common/torlog.h				\
   src/common/tortls.h				\
@@ -2482,104 +2763,59 @@ COMMONHEADERS = \
 
 @BUILD_NT_SERVICES_FALSE@tor_platform_source = 
 @BUILD_NT_SERVICES_TRUE@tor_platform_source = src/or/ntmain.c
-LIBTOR_A_SOURCES = \
-	src/or/addressmap.c				\
-	src/or/bridges.c				\
-	src/or/channel.c				\
-	src/or/channelpadding.c				\
-	src/or/channeltls.c				\
-	src/or/circpathbias.c				\
-	src/or/circuitbuild.c				\
-	src/or/circuitlist.c				\
-	src/or/circuitmux.c				\
-	src/or/circuitmux_ewma.c			\
-	src/or/circuitstats.c				\
-	src/or/circuituse.c				\
-	src/or/command.c				\
-	src/or/config.c					\
-	src/or/confparse.c				\
-	src/or/connection.c				\
-	src/or/connection_edge.c			\
-	src/or/connection_or.c				\
-	src/or/conscache.c				\
-	src/or/consdiff.c				\
-	src/or/consdiffmgr.c				\
-	src/or/control.c				\
-	src/or/cpuworker.c				\
-	src/or/dircollate.c				\
-	src/or/directory.c				\
-	src/or/dirserv.c				\
-	src/or/dirvote.c				\
-	src/or/dns.c					\
-	src/or/dnsserv.c				\
-	src/or/dos.c					\
-	src/or/fp_pair.c				\
-	src/or/geoip.c					\
-	src/or/entrynodes.c				\
-	src/or/ext_orport.c				\
-	src/or/git_revision.c				\
-	src/or/hibernate.c				\
-	src/or/hs_cache.c				\
-	src/or/hs_cell.c				\
-	src/or/hs_circuit.c				\
-	src/or/hs_circuitmap.c				\
-	src/or/hs_client.c				\
-	src/or/hs_common.c				\
-	src/or/hs_config.c				\
-	src/or/hs_control.c				\
-	src/or/hs_descriptor.c				\
-	src/or/hs_ident.c				\
-	src/or/hs_intropoint.c				\
-	src/or/hs_ntor.c				\
-	src/or/hs_service.c				\
-	src/or/hs_stats.c				\
-	src/or/keypin.c					\
-	src/or/main.c					\
-	src/or/microdesc.c				\
-	src/or/networkstatus.c				\
-	src/or/nodelist.c				\
-	src/or/onion.c					\
-	src/or/onion_fast.c				\
-	src/or/onion_tap.c				\
-	src/or/shared_random.c			\
-	src/or/shared_random_state.c		\
-	src/or/transports.c				\
-	src/or/parsecommon.c			\
-	src/or/periodic.c				\
-	src/or/protover.c				\
-	src/or/protover_rust.c				\
-	src/or/proto_cell.c				\
-	src/or/proto_control0.c				\
-	src/or/proto_ext_or.c				\
-	src/or/proto_http.c				\
-	src/or/proto_socks.c				\
-	src/or/policies.c				\
-	src/or/reasons.c				\
-	src/or/relay.c					\
-	src/or/rendcache.c				\
-	src/or/rendclient.c				\
-	src/or/rendcommon.c				\
-	src/or/rendmid.c				\
-	src/or/rendservice.c				\
-	src/or/rephist.c				\
-	src/or/replaycache.c				\
-	src/or/router.c					\
-	src/or/routerkeys.c				\
-	src/or/routerlist.c				\
-	src/or/routerparse.c				\
-	src/or/routerset.c				\
-	src/or/scheduler.c				\
-	src/or/scheduler_kist.c				\
-	src/or/scheduler_vanilla.c			\
-	src/or/statefile.c				\
-	src/or/status.c					\
-	src/or/torcert.c				\
-	src/or/tor_api.c				\
-	src/or/onion_ntor.c				\
-	$(tor_platform_source)
+LIBTOR_A_SOURCES = src/or/addressmap.c src/or/bridges.c \
+	src/or/channel.c src/or/channelpadding.c src/or/channeltls.c \
+	src/or/circpathbias.c src/or/circuitbuild.c \
+	src/or/circuitlist.c src/or/circuitmux.c \
+	src/or/circuitmux_ewma.c src/or/circuitstats.c \
+	src/or/circuituse.c src/or/command.c src/or/config.c \
+	src/or/confparse.c src/or/connection.c \
+	src/or/connection_edge.c src/or/connection_or.c \
+	src/or/conscache.c src/or/consdiff.c src/or/consdiffmgr.c \
+	src/or/control.c src/or/cpuworker.c src/or/directory.c \
+	src/or/dirserv.c src/or/dns.c src/or/dnsserv.c src/or/dos.c \
+	src/or/fp_pair.c src/or/geoip.c src/or/entrynodes.c \
+	src/or/ext_orport.c src/or/git_revision.c src/or/hibernate.c \
+	src/or/hs_cache.c src/or/hs_cell.c src/or/hs_circuit.c \
+	src/or/hs_circuitmap.c src/or/hs_client.c src/or/hs_common.c \
+	src/or/hs_config.c src/or/hs_control.c src/or/hs_descriptor.c \
+	src/or/hs_ident.c src/or/hs_intropoint.c src/or/hs_ntor.c \
+	src/or/hs_service.c src/or/hs_stats.c src/or/keypin.c \
+	src/or/main.c src/or/microdesc.c src/or/networkstatus.c \
+	src/or/nodelist.c src/or/onion.c src/or/onion_fast.c \
+	src/or/onion_tap.c src/or/transports.c src/or/parsecommon.c \
+	src/or/periodic.c src/or/protover.c src/or/protover_rust.c \
+	src/or/proto_cell.c src/or/proto_control0.c \
+	src/or/proto_ext_or.c src/or/proto_http.c src/or/proto_socks.c \
+	src/or/policies.c src/or/reasons.c src/or/relay.c \
+	src/or/relay_crypto.c src/or/rendcache.c src/or/rendclient.c \
+	src/or/rendcommon.c src/or/rendmid.c src/or/rendservice.c \
+	src/or/rephist.c src/or/replaycache.c src/or/router.c \
+	src/or/routerkeys.c src/or/routerlist.c src/or/routerparse.c \
+	src/or/routerset.c src/or/scheduler.c src/or/scheduler_kist.c \
+	src/or/scheduler_vanilla.c src/or/shared_random_client.c \
+	src/or/statefile.c src/or/status.c src/or/torcert.c \
+	src/or/tor_api.c src/or/voting_schedule.c src/or/onion_ntor.c \
+	$(tor_platform_source) $(am__append_9)
+
+#
+# Modules are conditionnally compiled in tor starting here. We add the C files
+# only if the modules has been enabled at configure time. We always add the
+# source files of every module to libtor-testing.a so we can build the unit
+# tests for everything. See the UNITTESTS_ENABLED branch below.
+#
+LIBTOR_TESTING_A_SOURCES = $(LIBTOR_A_SOURCES) $(am__append_10)
+
+# The Directory Authority module.
+MODULE_DIRAUTH_SOURCES = \
+	src/or/dirauth/dircollate.c				\
+	src/or/dirauth/dirvote.c				\
+	src/or/dirauth/shared_random.c				\
+	src/or/dirauth/shared_random_state.c
 
 src_or_libtor_a_SOURCES = $(LIBTOR_A_SOURCES)
-src_or_libtor_testing_a_SOURCES = $(LIBTOR_A_SOURCES)
+@UNITTESTS_ENABLED_FALSE@src_or_libtor_testing_a_SOURCES = 
+@UNITTESTS_ENABLED_TRUE@src_or_libtor_testing_a_SOURCES = $(LIBTOR_TESTING_A_SOURCES)
 src_or_tor_SOURCES = src/or/tor_main.c
 src_or_libtor_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_or_libtor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
@@ -2610,104 +2846,49 @@ src_or_tor_LDADD = src/or/libtor.a src/c
 @COVERAGE_ENABLED_TRUE@	@TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ @TOR_SYSTEMD_LIBS@ \
 @COVERAGE_ENABLED_TRUE@	@TOR_LZMA_LIBS@ @TOR_ZSTD_LIBS@
 
-ORHEADERS = \
-	src/or/addressmap.h				\
-	src/or/auth_dirs.inc				\
-	src/or/bridges.h				\
-	src/or/channel.h				\
-	src/or/channelpadding.h				\
-	src/or/channeltls.h				\
-	src/or/circpathbias.h				\
-	src/or/circuitbuild.h				\
-	src/or/circuitlist.h				\
-	src/or/circuitmux.h				\
-	src/or/circuitmux_ewma.h			\
-	src/or/circuitstats.h				\
-	src/or/circuituse.h				\
-	src/or/command.h				\
-	src/or/config.h					\
-	src/or/confparse.h				\
-	src/or/connection.h				\
-	src/or/connection_edge.h			\
-	src/or/connection_or.h				\
-	src/or/conscache.h				\
-	src/or/consdiff.h				\
-	src/or/consdiffmgr.h				\
-	src/or/control.h				\
-	src/or/cpuworker.h				\
-	src/or/dircollate.h				\
-	src/or/directory.h				\
-	src/or/dirserv.h				\
-	src/or/dirvote.h				\
-	src/or/dns.h					\
-	src/or/dns_structs.h				\
-	src/or/dnsserv.h				\
-	src/or/dos.h					\
-	src/or/ext_orport.h				\
-	src/or/fallback_dirs.inc			\
-	src/or/fp_pair.h				\
-	src/or/geoip.h					\
-	src/or/entrynodes.h				\
-	src/or/git_revision.h				\
-	src/or/hibernate.h				\
-	src/or/hs_cache.h				\
-	src/or/hs_cell.h				\
-	src/or/hs_circuit.h				\
-	src/or/hs_circuitmap.h				\
-	src/or/hs_client.h				\
-	src/or/hs_common.h				\
-	src/or/hs_config.h				\
-	src/or/hs_control.h				\
-	src/or/hs_descriptor.h				\
-	src/or/hs_ident.h				\
-	src/or/hs_intropoint.h				\
-	src/or/hs_ntor.h				\
-	src/or/hs_stats.h				\
-	src/or/hs_service.h				\
-	src/or/keypin.h					\
-	src/or/main.h					\
-	src/or/microdesc.h				\
-	src/or/networkstatus.h				\
-	src/or/nodelist.h				\
-	src/or/ntmain.h					\
-	src/or/onion.h					\
-	src/or/onion_fast.h				\
-	src/or/onion_ntor.h				\
-	src/or/onion_tap.h				\
-	src/or/or.h					\
-	src/or/shared_random.h			\
-	src/or/shared_random_state.h		\
-	src/or/transports.h				\
-	src/or/parsecommon.h			\
-	src/or/periodic.h				\
-	src/or/policies.h				\
-	src/or/protover.h				\
-	src/or/proto_cell.h				\
-	src/or/proto_control0.h				\
-	src/or/proto_ext_or.h				\
-	src/or/proto_http.h				\
-	src/or/proto_socks.h				\
-	src/or/reasons.h				\
-	src/or/relay.h					\
-	src/or/rendcache.h				\
-	src/or/rendclient.h				\
-	src/or/rendcommon.h				\
-	src/or/rendmid.h				\
-	src/or/rendservice.h				\
-	src/or/rephist.h				\
-	src/or/replaycache.h				\
-	src/or/router.h					\
-	src/or/routerkeys.h				\
-	src/or/routerlist.h				\
-	src/or/routerkeys.h				\
-	src/or/routerset.h				\
-	src/or/routerparse.h				\
-	src/or/scheduler.h				\
-	src/or/statefile.h				\
-	src/or/status.h					\
-	src/or/torcert.h				\
-	src/or/tor_api_internal.h
 
+# We add the headers of the modules even though they are disabled so we can
+# properly compiled the entry points stub.
+
+# The Directory Authority module headers.
+ORHEADERS = src/or/addressmap.h src/or/auth_dirs.inc src/or/bridges.h \
+	src/or/channel.h src/or/channelpadding.h src/or/channeltls.h \
+	src/or/circpathbias.h src/or/circuitbuild.h \
+	src/or/circuitlist.h src/or/circuitmux.h \
+	src/or/circuitmux_ewma.h src/or/circuitstats.h \
+	src/or/circuituse.h src/or/command.h src/or/config.h \
+	src/or/confparse.h src/or/connection.h \
+	src/or/connection_edge.h src/or/connection_or.h \
+	src/or/conscache.h src/or/consdiff.h src/or/consdiffmgr.h \
+	src/or/control.h src/or/cpuworker.h src/or/directory.h \
+	src/or/dirserv.h src/or/dns.h src/or/dns_structs.h \
+	src/or/dnsserv.h src/or/dos.h src/or/ext_orport.h \
+	src/or/fallback_dirs.inc src/or/fp_pair.h src/or/geoip.h \
+	src/or/entrynodes.h src/or/git_revision.h src/or/hibernate.h \
+	src/or/hs_cache.h src/or/hs_cell.h src/or/hs_circuit.h \
+	src/or/hs_circuitmap.h src/or/hs_client.h src/or/hs_common.h \
+	src/or/hs_config.h src/or/hs_control.h src/or/hs_descriptor.h \
+	src/or/hs_ident.h src/or/hs_intropoint.h src/or/hs_ntor.h \
+	src/or/hs_stats.h src/or/hs_service.h src/or/keypin.h \
+	src/or/main.h src/or/microdesc.h src/or/networkstatus.h \
+	src/or/nodelist.h src/or/ntmain.h src/or/onion.h \
+	src/or/onion_fast.h src/or/onion_ntor.h src/or/onion_tap.h \
+	src/or/or.h src/or/transports.h src/or/parsecommon.h \
+	src/or/periodic.h src/or/policies.h src/or/protover.h \
+	src/or/proto_cell.h src/or/proto_control0.h \
+	src/or/proto_ext_or.h src/or/proto_http.h src/or/proto_socks.h \
+	src/or/reasons.h src/or/relay.h src/or/relay_crypto.h \
+	src/or/rendcache.h src/or/rendclient.h src/or/rendcommon.h \
+	src/or/rendmid.h src/or/rendservice.h src/or/rephist.h \
+	src/or/replaycache.h src/or/router.h src/or/routerkeys.h \
+	src/or/routerlist.h src/or/routerkeys.h src/or/routerset.h \
+	src/or/routerparse.h src/or/scheduler.h \
+	src/or/shared_random_client.h src/or/statefile.h \
+	src/or/status.h src/or/torcert.h src/or/tor_api_internal.h \
+	src/or/voting_schedule.h src/or/dirauth/dircollate.h \
+	src/or/dirauth/dirvote.h src/or/dirauth/mode.h \
+	src/or/dirauth/shared_random.h \
+	src/or/dirauth/shared_random_state.h
 EXTRA_CARGO_OPTIONS = 
 
 # When the day comes that Tor requires Automake >= 1.12 change
@@ -2722,7 +2903,10 @@ TESTS_ENVIRONMENT = \
 	export TESTING_TOR_BINARY="$(TESTING_TOR_BINARY)"; \
 	export CARGO="$(CARGO)"; \
 	export EXTRA_CARGO_OPTIONS="$(EXTRA_CARGO_OPTIONS)"; \
-	export CARGO_ONLINE="$(CARGO_ONLINE)";
+	export CARGO_ONLINE="$(CARGO_ONLINE)"; \
+        export CCLD="$(CCLD)"; \
+        chmod +x "$(abs_top_builddir)/link_rust.sh"; \
+        export RUSTFLAGS="-C linker=$(abs_top_builddir)/link_rust.sh";
 
 TESTSCRIPTS = src/test/fuzz_static_testcases.sh \
 	src/test/test_zero_length_keys.sh \
@@ -2731,7 +2915,7 @@ TESTSCRIPTS = src/test/fuzz_static_testc
 	src/test/test_workqueue_pipe.sh \
 	src/test/test_workqueue_pipe2.sh \
 	src/test/test_workqueue_socketpair.sh \
-	src/test/test_switch_id.sh $(am__append_9) $(am__append_10)
+	src/test/test_switch_id.sh $(am__append_11) $(am__append_12)
 
 # These flavors are run using automake's test-driver and test-network.sh
 TEST_CHUTNEY_FLAVORS = basic-min bridges-min hs-v2-min hs-v3-min \
@@ -2744,7 +2928,7 @@ TEST_CHUTNEY_FLAVORS_IPV6 = bridges+ipv6
 	single-onion-ipv6-md
 
 # only run if we can find a stable (or simply another) version of tor
-TEST_CHUTNEY_FLAVORS_MIXED = mixed+hs-v23
+TEST_CHUTNEY_FLAVORS_MIXED = mixed+hs-v2
 src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
         -DLOCALSTATEDIR="\"$(localstatedir)\"" \
         -DBINDIR="\"$(bindir)\""	       \
@@ -2757,107 +2941,8 @@ src_test_AM_CPPFLAGS = -DSHARE_DATADIR="
 # -L flags need to go in LDFLAGS. -l flags need to go in LDADD.
 # This seems to matter nowhere but on Windows, but I assure you that it
 # matters a lot there, and is quite hard to debug if you forget to do it.
-src_test_test_SOURCES = \
-	src/test/log_test_helpers.c \
-	src/test/hs_test_helpers.c \
-	src/test/rend_test_helpers.c \
-	src/test/test.c \
-	src/test/test_accounting.c \
-	src/test/test_addr.c \
-	src/test/test_address.c \
-	src/test/test_address_set.c \
-	src/test/test_buffers.c \
-	src/test/test_cell_formats.c \
-	src/test/test_cell_queue.c \
-	src/test/test_channel.c \
-	src/test/test_channelpadding.c \
-	src/test/test_channeltls.c \
-	src/test/test_checkdir.c \
-	src/test/test_circuitlist.c \
-	src/test/test_circuitmux.c \
-	src/test/test_circuitbuild.c \
-	src/test/test_circuituse.c \
-	src/test/test_circuitstats.c \
-	src/test/test_compat_libevent.c \
-	src/test/test_config.c \
-	src/test/test_connection.c \
-	src/test/test_conscache.c \
-	src/test/test_consdiff.c \
-	src/test/test_consdiffmgr.c \
-	src/test/test_containers.c \
-	src/test/test_controller.c \
-	src/test/test_controller_events.c \
-	src/test/test_crypto.c \
-	src/test/test_crypto_openssl.c \
-	src/test/test_data.c \
-	src/test/test_dir.c \
-	src/test/test_dir_common.c \
-	src/test/test_dir_handle_get.c \
-	src/test/test_dos.c \
-	src/test/test_entryconn.c \
-	src/test/test_entrynodes.c \
-	src/test/test_guardfraction.c \
-	src/test/test_extorport.c \
-	src/test/test_hs.c \
-	src/test/test_hs_common.c \
-	src/test/test_hs_config.c \
-	src/test/test_hs_cell.c \
-	src/test/test_hs_ntor.c \
-	src/test/test_hs_service.c \
-	src/test/test_hs_client.c  \
-	src/test/test_hs_intropoint.c \
-	src/test/test_hs_control.c \
-	src/test/test_handles.c \
-	src/test/test_hs_cache.c \
-	src/test/test_hs_descriptor.c \
-	src/test/test_introduce.c \
-	src/test/test_keypin.c \
-	src/test/test_link_handshake.c \
-	src/test/test_logging.c \
-	src/test/test_microdesc.c \
-	src/test/test_nodelist.c \
-	src/test/test_oom.c \
-	src/test/test_oos.c \
-	src/test/test_options.c \
-	src/test/test_policy.c \
-	src/test/test_procmon.c \
-	src/test/test_proto_http.c \
-	src/test/test_proto_misc.c \
-	src/test/test_protover.c \
-	src/test/test_pt.c \
-	src/test/test_pubsub.c \
-	src/test/test_relay.c \
-	src/test/test_relaycell.c \
-	src/test/test_rendcache.c \
-	src/test/test_replay.c \
-	src/test/test_router.c \
-	src/test/test_routerkeys.c \
-	src/test/test_routerlist.c \
-	src/test/test_routerset.c \
-	src/test/test_scheduler.c \
-	src/test/test_shared_random.c \
-	src/test/test_socks.c \
-	src/test/test_status.c \
-	src/test/test_storagedir.c \
-	src/test/test_threads.c \
-	src/test/test_tortls.c \
-	src/test/test_util.c \
-	src/test/test_util_format.c \
-	src/test/test_util_process.c \
-	src/test/test_helpers.c \
-	src/test/test_dns.c \
-	src/test/testing_common.c \
-	src/test/testing_rsakeys.c \
-	src/ext/tinytest.c
-
-src_test_test_slow_SOURCES = \
-	src/test/test_slow.c \
-	src/test/test_crypto_slow.c \
-	src/test/test_util_slow.c \
-	src/test/testing_common.c \
-	src/test/testing_rsakeys.c \
-	src/ext/tinytest.c
-
+src_test_test_SOURCES = $(am__append_14)
+src_test_test_slow_SOURCES = $(am__append_15)
 src_test_test_memwipe_SOURCES = \
 	src/test/test-memwipe.c
 
@@ -2985,16 +3070,16 @@ src_test_test_hs_ntor_cl_LDADD = src/or/
 src_test_test_hs_ntor_cl_AM_CPPFLAGS = \
 	-I"$(top_srcdir)/src/or"
 
-src_test_test_bt_cl_SOURCES = src/test/test_bt_cl.c
-src_test_test_bt_cl_LDADD = src/common/libor-testing.a \
-	src/common/libor-ctime-testing.a \
-	src/trace/libor-trace.a \
-	$(rust_ldadd) \
-	@TOR_LIB_MATH@ \
-	@TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ 
+@UNITTESTS_ENABLED_TRUE@src_test_test_bt_cl_SOURCES = src/test/test_bt_cl.c
+@UNITTESTS_ENABLED_TRUE@src_test_test_bt_cl_LDADD = src/common/libor-testing.a \
+@UNITTESTS_ENABLED_TRUE@	src/common/libor-ctime-testing.a \
+@UNITTESTS_ENABLED_TRUE@	src/trace/libor-trace.a \
+@UNITTESTS_ENABLED_TRUE@	$(rust_ldadd) \
+@UNITTESTS_ENABLED_TRUE@	@TOR_LIB_MATH@ \
+@UNITTESTS_ENABLED_TRUE@	@TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@
 
-src_test_test_bt_cl_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
-src_test_test_bt_cl_CPPFLAGS = $(src_test_AM_CPPFLAGS) $(TEST_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_test_bt_cl_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_test_bt_cl_CPPFLAGS = $(src_test_AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_tools_tor_resolve_SOURCES = src/tools/tor-resolve.c
 src_tools_tor_resolve_LDFLAGS = 
 src_tools_tor_resolve_LDADD = src/common/libor.a \
@@ -3059,8 +3144,9 @@ FUZZING_LIBS = \
 	src/trunnel/libor-trunnel-testing.a \
 	$(rust_ldadd) \
 	@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \
-	@TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
-	@TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ @CURVE25519_LIBS@ \
+	@TOR_LIBEVENT_LIBS@ \
+	@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \
+	@CURVE25519_LIBS@ \
 	@TOR_SYSTEMD_LIBS@ \
 	@TOR_LZMA_LIBS@ \
 	@TOR_ZSTD_LIBS@
@@ -3074,202 +3160,202 @@ LIBOSS_FUZZ_CPPFLAGS = $(FUZZING_CPPFLAG
 LIBOSS_FUZZ_CFLAGS = $(FUZZING_CFLAGS)
 
 # ===== AFL fuzzers
-src_test_fuzz_fuzz_consensus_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_consensus.c
-
-src_test_fuzz_fuzz_consensus_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_consensus_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_consensus_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_consensus_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_descriptor_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_descriptor.c
-
-src_test_fuzz_fuzz_descriptor_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_descriptor_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_descriptor_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_descriptor_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_diff_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_diff.c
-
-src_test_fuzz_fuzz_diff_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_diff_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_diff_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_diff_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_diff_apply_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_diff_apply.c
-
-src_test_fuzz_fuzz_diff_apply_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_diff_apply_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_diff_apply_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_diff_apply_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_extrainfo_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_extrainfo.c
-
-src_test_fuzz_fuzz_extrainfo_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_extrainfo_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_extrainfo_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_extrainfo_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_hsdescv2_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_hsdescv2.c
-
-src_test_fuzz_fuzz_hsdescv2_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_hsdescv2_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_hsdescv2_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_hsdescv2_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_hsdescv3_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_hsdescv3.c
-
-src_test_fuzz_fuzz_hsdescv3_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_hsdescv3_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_hsdescv3_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_hsdescv3_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_http_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_http.c
-
-src_test_fuzz_fuzz_http_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_http_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_http_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_http_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_http_connect_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_http_connect.c
-
-src_test_fuzz_fuzz_http_connect_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_http_connect_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_http_connect_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_http_connect_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_iptsv2_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_iptsv2.c
-
-src_test_fuzz_fuzz_iptsv2_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_iptsv2_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_iptsv2_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_iptsv2_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_microdesc_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_microdesc.c
-
-src_test_fuzz_fuzz_microdesc_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_microdesc_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_microdesc_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_microdesc_LDADD = $(FUZZING_LIBS)
-src_test_fuzz_fuzz_vrs_SOURCES = \
-	src/test/fuzz/fuzzing_common.c \
-	src/test/fuzz/fuzz_vrs.c
-
-src_test_fuzz_fuzz_vrs_CPPFLAGS = $(FUZZING_CPPFLAGS)
-src_test_fuzz_fuzz_vrs_CFLAGS = $(FUZZING_CFLAGS)
-src_test_fuzz_fuzz_vrs_LDFLAGS = $(FUZZING_LDFLAG)
-src_test_fuzz_fuzz_vrs_LDADD = $(FUZZING_LIBS)
-FUZZERS = \
-	src/test/fuzz/fuzz-consensus \
-	src/test/fuzz/fuzz-descriptor \
-	src/test/fuzz/fuzz-diff \
-	src/test/fuzz/fuzz-diff-apply \
-	src/test/fuzz/fuzz-extrainfo \
-	src/test/fuzz/fuzz-hsdescv2 \
-	src/test/fuzz/fuzz-hsdescv3 \
-	src/test/fuzz/fuzz-http \
-	src/test/fuzz/fuzz-http-connect \
-	src/test/fuzz/fuzz-iptsv2 \
-	src/test/fuzz/fuzz-microdesc \
-	src/test/fuzz/fuzz-vrs
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_consensus_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_consensus.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_consensus_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_consensus_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_consensus_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_consensus_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_descriptor_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_descriptor.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_descriptor_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_descriptor_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_descriptor_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_descriptor_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_diff.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_apply_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_diff_apply.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_apply_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_apply_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_apply_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_diff_apply_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_extrainfo_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_extrainfo.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_extrainfo_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_extrainfo_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_extrainfo_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_extrainfo_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv2_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_hsdescv2.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv2_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv2_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv2_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv2_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv3_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_hsdescv3.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv3_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv3_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv3_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_hsdescv3_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_http.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_connect_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_http_connect.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_connect_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_connect_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_connect_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_http_connect_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_iptsv2_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_iptsv2.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_iptsv2_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_iptsv2_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_iptsv2_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_iptsv2_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_microdesc_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_microdesc.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_microdesc_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_microdesc_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_microdesc_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_microdesc_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_vrs_SOURCES = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzzing_common.c \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz_vrs.c
+
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_vrs_CPPFLAGS = $(FUZZING_CPPFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_vrs_CFLAGS = $(FUZZING_CFLAGS)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_vrs_LDFLAGS = $(FUZZING_LDFLAG)
+@UNITTESTS_ENABLED_TRUE@src_test_fuzz_fuzz_vrs_LDADD = $(FUZZING_LIBS)
+@UNITTESTS_ENABLED_TRUE@FUZZERS = \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-consensus \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-descriptor \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-diff \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-diff-apply \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-extrainfo \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-hsdescv2 \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-hsdescv3 \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-http \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-http-connect \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-iptsv2 \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-microdesc \
+@UNITTESTS_ENABLED_TRUE@	src/test/fuzz/fuzz-vrs
 
 
 # ===== libfuzzer
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_consensus_SOURCES)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_consensus_SOURCES)
 
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_descriptor_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_apply_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_extrainfo_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv2_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv3_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_connect_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_iptsv2_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_microdesc_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_LDADD = $(LIBFUZZER_LIBS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_SOURCES = \
-@LIBFUZZER_ENABLED_TRUE@	$(src_test_fuzz_fuzz_vrs_SOURCES)
-
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_CFLAGS = $(LIBFUZZER_CFLAGS)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_LDFLAGS = $(LIBFUZZER_LDFLAG)
-@LIBFUZZER_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_consensus_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_descriptor_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_descriptor_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_apply_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_diff_apply_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_extrainfo_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_extrainfo_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv2_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv2_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv3_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_hsdescv3_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_connect_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_http_connect_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_iptsv2_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_iptsv2_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_microdesc_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_microdesc_LDADD = $(LIBFUZZER_LIBS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_SOURCES = \
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_vrs_SOURCES)
+
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_CPPFLAGS = $(LIBFUZZER_CPPFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_CFLAGS = $(LIBFUZZER_CFLAGS)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_LDFLAGS = $(LIBFUZZER_LDFLAG)
+@LIBFUZZER_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_lf_fuzz_vrs_LDADD = $(LIBFUZZER_LIBS)
 @LIBFUZZER_ENABLED_FALSE@LIBFUZZER_FUZZERS = 
 @LIBFUZZER_ENABLED_TRUE@LIBFUZZER_FUZZERS = \
 @LIBFUZZER_ENABLED_TRUE@	src/test/fuzz/lf-fuzz-consensus \
@@ -3287,66 +3373,66 @@ FUZZERS = \
 
 
 # ===== oss-fuzz
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_consensus_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_consensus_SOURCES)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_consensus_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_consensus_SOURCES)
 
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_consensus_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_consensus_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_descriptor_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_descriptor_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_descriptor_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_descriptor_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_apply_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_apply_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_apply_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_apply_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_extrainfo_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_extrainfo_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_extrainfo_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_extrainfo_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv2_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv2_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv2_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv2_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv3_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv3_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv3_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv3_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_connect_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_connect_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_connect_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_connect_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_iptsv2_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_iptsv2_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_iptsv2_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_iptsv2_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_microdesc_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_microdesc_SOURCES)
-
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_microdesc_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_microdesc_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_vrs_a_SOURCES = \
-@OSS_FUZZ_ENABLED_TRUE@	$(src_test_fuzz_fuzz_vrs_SOURCES)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_consensus_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_consensus_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_descriptor_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_descriptor_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_descriptor_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_descriptor_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_apply_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_diff_apply_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_apply_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_diff_apply_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_extrainfo_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_extrainfo_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_extrainfo_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_extrainfo_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv2_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv2_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv2_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv2_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv3_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_hsdescv3_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv3_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_hsdescv3_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_connect_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_http_connect_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_connect_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_http_connect_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_iptsv2_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_iptsv2_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_iptsv2_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_iptsv2_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_microdesc_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_microdesc_SOURCES)
+
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_microdesc_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_microdesc_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_vrs_a_SOURCES = \
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@	$(src_test_fuzz_fuzz_vrs_SOURCES)
 
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_vrs_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
-@OSS_FUZZ_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_vrs_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_vrs_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS)
+@OSS_FUZZ_ENABLED_TRUE@@UNITTESTS_ENABLED_TRUE@src_test_fuzz_liboss_fuzz_vrs_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS)
 @OSS_FUZZ_ENABLED_FALSE@OSS_FUZZ_FUZZERS = 
 @OSS_FUZZ_ENABLED_TRUE@OSS_FUZZ_FUZZERS = \
 @OSS_FUZZ_ENABLED_TRUE@	src/test/fuzz/liboss-fuzz-consensus.a \
@@ -3365,7 +3451,7 @@ FUZZERS = \
 LIBOR_TRACE_A_SOURCES = \
 	src/trace/trace.c
 
-TRACEHEADERS = src/trace/trace.h src/trace/events.h $(am__append_14)
+TRACEHEADERS = src/trace/trace.h src/trace/events.h $(am__append_19)
 
 # Library source files.
 src_trace_libor_trace_a_SOURCES = $(LIBOR_TRACE_A_SOURCES)
@@ -3382,12 +3468,12 @@ all_mans = doc/tor doc/tor-gencert doc/t
 @USE_ASCIIDOC_TRUE@txt_in = $(all_mans:=.1.txt)
 asciidoc_product = $(nodist_man1_MANS) $(doc_DATA)
 AM_ETAGSFLAGS = --regex='{c}/MOCK_IMPL([^,]+,\W*\([a-zA-Z0-9_]+\)\W*,/\1/s'
-@COVERAGE_ENABLED_FALSE@TEST_CFLAGS = $(am__append_15)
+@COVERAGE_ENABLED_FALSE@TEST_CFLAGS = $(am__append_20)
 @COVERAGE_ENABLED_TRUE@TEST_CFLAGS = -fno-inline -fprofile-arcs \
-@COVERAGE_ENABLED_TRUE@	-ftest-coverage $(am__append_15)
-@COVERAGE_ENABLED_FALSE@TEST_CPPFLAGS = -DTOR_UNIT_TESTS
-@COVERAGE_ENABLED_TRUE@@DISABLE_ASSERTS_IN_UNIT_TESTS_FALSE@TEST_CPPFLAGS = -DTOR_UNIT_TESTS -DTOR_COVERAGE
-@COVERAGE_ENABLED_TRUE@@DISABLE_ASSERTS_IN_UNIT_TESTS_TRUE@TEST_CPPFLAGS = -DTOR_UNIT_TESTS -DTOR_COVERAGE -DDISABLE_ASSERTS_IN_UNIT_TESTS
+@COVERAGE_ENABLED_TRUE@	-ftest-coverage $(am__append_20)
+@COVERAGE_ENABLED_FALSE@TEST_CPPFLAGS = -DTOR_UNIT_TESTS @TOR_MODULES_ALL_ENABLED@
+@COVERAGE_ENABLED_TRUE@@DISABLE_ASSERTS_IN_UNIT_TESTS_FALSE@TEST_CPPFLAGS = -DTOR_UNIT_TESTS -DTOR_COVERAGE @TOR_MODULES_ALL_ENABLED@
+@COVERAGE_ENABLED_TRUE@@DISABLE_ASSERTS_IN_UNIT_TESTS_TRUE@TEST_CPPFLAGS = -DTOR_UNIT_TESTS -DTOR_COVERAGE -DDISABLE_ASSERTS_IN_UNIT_TESTS @TOR_MODULES_ALL_ENABLED@
 @COVERAGE_ENABLED_FALSE@TEST_NETWORK_FLAGS = --hs-multi-client 1
 @COVERAGE_ENABLED_TRUE@TEST_NETWORK_FLAGS = --coverage --hs-multi-client 1
 TEST_NETWORK_WARNING_FLAGS = --quiet --only-warnings
@@ -3415,7 +3501,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefi
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -3425,7 +3510,7 @@ Makefile: $(srcdir)/Makefile.in $(top_bu
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
 	esac;
-$(srcdir)/src/include.am $(srcdir)/src/ext/include.am $(srcdir)/src/trunnel/include.am $(srcdir)/src/common/include.am $(srcdir)/src/or/include.am $(srcdir)/src/rust/include.am $(srcdir)/src/rust/tor_rust/include.am $(srcdir)/src/test/include.am $(srcdir)/src/tools/include.am $(srcdir)/src/win32/include.am $(srcdir)/src/config/include.am $(srcdir)/src/test/fuzz/include.am $(srcdir)/src/trace/include.am $(srcdir)/doc/include.am $(srcdir)/contrib/include.am:
+$(srcdir)/src/include.am $(srcdir)/src/ext/include.am $(srcdir)/src/trunnel/include.am $(srcdir)/src/common/include.am $(srcdir)/src/or/include.am $(srcdir)/src/rust/include.am $(srcdir)/src/rust/tor_rust/include.am $(srcdir)/src/test/include.am $(srcdir)/src/tools/include.am $(srcdir)/src/win32/include.am $(srcdir)/src/config/include.am $(srcdir)/src/test/fuzz/include.am $(srcdir)/src/trace/include.am $(srcdir)/doc/include.am $(srcdir)/contrib/include.am $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
@@ -3452,6 +3537,10 @@ distclean-hdr:
 	-rm -f orconfig.h stamp-h1
 Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
+config.rust: $(top_builddir)/config.status $(srcdir)/config.rust.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+link_rust.sh: $(top_builddir)/config.status $(srcdir)/link_rust.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 contrib/dist/suse/tor.sh: $(top_builddir)/config.status $(top_srcdir)/contrib/dist/suse/tor.sh.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 contrib/operator-tools/tor.logrotate: $(top_builddir)/config.status $(top_srcdir)/contrib/operator-tools/tor.logrotate.in
@@ -3522,7 +3611,10 @@ src/common/src_common_libor_crypto_testi
 src/common/src_common_libor_crypto_testing_a-crypto.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/src_common_libor_crypto_testing_a-crypto_rsa.$(OBJEXT):  \
+src/common/src_common_libor_crypto_testing_a-crypto_digest.$(OBJEXT):  \
+	src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/src_common_libor_crypto_testing_a-crypto_format.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/src_common_libor_crypto_testing_a-crypto_openssl_mgt.$(OBJEXT):  \
@@ -3531,10 +3623,16 @@ src/common/src_common_libor_crypto_testi
 src/common/src_common_libor_crypto_testing_a-crypto_pwbox.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/src_common_libor_crypto_testing_a-crypto_rand.$(OBJEXT):  \
+	src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/src_common_libor_crypto_testing_a-crypto_rsa.$(OBJEXT):  \
+	src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/src_common_libor_crypto_testing_a-crypto_s2k.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/src_common_libor_crypto_testing_a-crypto_format.$(OBJEXT):  \
+src/common/src_common_libor_crypto_testing_a-crypto_util.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/src_common_libor_crypto_testing_a-tortls.$(OBJEXT):  \
@@ -3567,15 +3665,21 @@ src/common/compress_zstd.$(OBJEXT): src/
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/crypto.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/crypto_rsa.$(OBJEXT): src/common/$(am__dirstamp) \
+src/common/crypto_digest.$(OBJEXT): src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/crypto_format.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/crypto_openssl_mgt.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/crypto_pwbox.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/crypto_rand.$(OBJEXT): src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/crypto_rsa.$(OBJEXT): src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/crypto_s2k.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
-src/common/crypto_format.$(OBJEXT): src/common/$(am__dirstamp) \
+src/common/crypto_util.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/tortls.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
@@ -3716,6 +3820,9 @@ src/common/src_common_libor_testing_a-sa
 src/common/src_common_libor_testing_a-storagedir.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/src_common_libor_testing_a-token_bucket.$(OBJEXT):  \
+	src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/src_common_libor_testing_a-workqueue.$(OBJEXT):  \
 	src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
@@ -3770,6 +3877,8 @@ src/common/sandbox.$(OBJEXT): src/common
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/storagedir.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
+src/common/token_bucket.$(OBJEXT): src/common/$(am__dirstamp) \
+	src/common/$(DEPDIR)/$(am__dirstamp)
 src/common/workqueue.$(OBJEXT): src/common/$(am__dirstamp) \
 	src/common/$(DEPDIR)/$(am__dirstamp)
 src/ext/OpenBSD_malloc_Linux.$(OBJEXT): src/ext/$(am__dirstamp) \
@@ -3999,14 +4108,10 @@ src/or/src_or_libtor_testing_a-control.$
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-cpuworker.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/src_or_libtor_testing_a-dircollate.$(OBJEXT):  \
-	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-directory.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-dirserv.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/src_or_libtor_testing_a-dirvote.$(OBJEXT):  \
-	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-dns.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-dnsserv.$(OBJEXT):  \
@@ -4069,10 +4174,6 @@ src/or/src_or_libtor_testing_a-onion_fas
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-onion_tap.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/src_or_libtor_testing_a-shared_random.$(OBJEXT):  \
-	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/src_or_libtor_testing_a-shared_random_state.$(OBJEXT):  \
-	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-transports.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-parsecommon.$(OBJEXT):  \
@@ -4099,6 +4200,8 @@ src/or/src_or_libtor_testing_a-reasons.$
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-relay.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/src_or_libtor_testing_a-relay_crypto.$(OBJEXT):  \
+	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-rendcache.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-rendclient.$(OBJEXT):  \
@@ -4129,6 +4232,8 @@ src/or/src_or_libtor_testing_a-scheduler
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-scheduler_vanilla.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/src_or_libtor_testing_a-shared_random_client.$(OBJEXT):  \
+	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-statefile.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-status.$(OBJEXT):  \
@@ -4137,10 +4242,30 @@ src/or/src_or_libtor_testing_a-torcert.$
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-tor_api.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/src_or_libtor_testing_a-voting_schedule.$(OBJEXT):  \
+	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-onion_ntor.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/src_or_libtor_testing_a-ntmain.$(OBJEXT):  \
 	src/or/$(am__dirstamp) src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/$(am__dirstamp):
+	@$(MKDIR_P) src/or/dirauth
+	@: > src/or/dirauth/$(am__dirstamp)
+src/or/dirauth/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/or/dirauth/$(DEPDIR)
+	@: > src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/src_or_libtor_testing_a-dircollate.$(OBJEXT):  \
+	src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/src_or_libtor_testing_a-dirvote.$(OBJEXT):  \
+	src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/src_or_libtor_testing_a-shared_random.$(OBJEXT):  \
+	src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/src_or_libtor_testing_a-shared_random_state.$(OBJEXT):  \
+	src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
 
 src/or/libtor-testing.a: $(src_or_libtor_testing_a_OBJECTS) $(src_or_libtor_testing_a_DEPENDENCIES) $(EXTRA_src_or_libtor_testing_a_DEPENDENCIES) src/or/$(am__dirstamp)
 	$(AM_V_at)-rm -f src/or/libtor-testing.a
@@ -4192,14 +4317,10 @@ src/or/control.$(OBJEXT): src/or/$(am__d
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/cpuworker.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/dircollate.$(OBJEXT): src/or/$(am__dirstamp) \
-	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/directory.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/dirserv.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/dirvote.$(OBJEXT): src/or/$(am__dirstamp) \
-	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/dns.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/dnsserv.$(OBJEXT): src/or/$(am__dirstamp) \
@@ -4262,10 +4383,6 @@ src/or/onion_fast.$(OBJEXT): src/or/$(am
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/onion_tap.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/shared_random.$(OBJEXT): src/or/$(am__dirstamp) \
-	src/or/$(DEPDIR)/$(am__dirstamp)
-src/or/shared_random_state.$(OBJEXT): src/or/$(am__dirstamp) \
-	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/transports.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/parsecommon.$(OBJEXT): src/or/$(am__dirstamp) \
@@ -4292,6 +4409,8 @@ src/or/reasons.$(OBJEXT): src/or/$(am__d
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/relay.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/relay_crypto.$(OBJEXT): src/or/$(am__dirstamp) \
+	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/rendcache.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/rendclient.$(OBJEXT): src/or/$(am__dirstamp) \
@@ -4322,6 +4441,8 @@ src/or/scheduler_kist.$(OBJEXT): src/or/
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/scheduler_vanilla.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/shared_random_client.$(OBJEXT): src/or/$(am__dirstamp) \
+	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/statefile.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/status.$(OBJEXT): src/or/$(am__dirstamp) \
@@ -4330,10 +4451,22 @@ src/or/torcert.$(OBJEXT): src/or/$(am__d
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/tor_api.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/voting_schedule.$(OBJEXT): src/or/$(am__dirstamp) \
+	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/onion_ntor.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
 src/or/ntmain.$(OBJEXT): src/or/$(am__dirstamp) \
 	src/or/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/dircollate.$(OBJEXT): src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/dirvote.$(OBJEXT): src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/shared_random.$(OBJEXT):  \
+	src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+src/or/dirauth/shared_random_state.$(OBJEXT):  \
+	src/or/dirauth/$(am__dirstamp) \
+	src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
 
 src/or/libtor.a: $(src_or_libtor_a_OBJECTS) $(src_or_libtor_a_DEPENDENCIES) $(EXTRA_src_or_libtor_a_DEPENDENCIES) src/or/$(am__dirstamp)
 	$(AM_V_at)-rm -f src/or/libtor.a
@@ -4910,8 +5043,12 @@ src/test/src_test_test-test_address.$(OB
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_address_set.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_bridges.$(OBJEXT):  \
+	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_buffers.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_bwmgt.$(OBJEXT): src/test/$(am__dirstamp) \
+	src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_cell_formats.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_cell_queue.$(OBJEXT):  \
@@ -4970,6 +5107,8 @@ src/test/src_test_test-test_entryconn.$(
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_entrynodes.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_geoip.$(OBJEXT): src/test/$(am__dirstamp) \
+	src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_guardfraction.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_extorport.$(OBJEXT):  \
@@ -5006,6 +5145,8 @@ src/test/src_test_test-test_link_handsha
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_logging.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_mainloop.$(OBJEXT):  \
+	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_microdesc.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_nodelist.$(OBJEXT):  \
@@ -5016,6 +5157,8 @@ src/test/src_test_test-test_oos.$(OBJEXT
 	src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_options.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_periodic_event.$(OBJEXT):  \
+	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_policy.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_procmon.$(OBJEXT):  \
@@ -5034,6 +5177,8 @@ src/test/src_test_test-test_relay.$(OBJE
 	src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_relaycell.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_relaycrypt.$(OBJEXT):  \
+	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_rendcache.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_replay.$(OBJEXT):  \
@@ -5066,6 +5211,8 @@ src/test/src_test_test-test_util_format.
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_util_process.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/src_test_test-test_voting_schedule.$(OBJEXT):  \
+	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_helpers.$(OBJEXT):  \
 	src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
 src/test/src_test_test-test_dns.$(OBJEXT): src/test/$(am__dirstamp) \
@@ -5216,6 +5363,7 @@ mostlyclean-compile:
 	-rm -f src/ext/timeouts/*.$(OBJEXT)
 	-rm -f src/ext/trunnel/*.$(OBJEXT)
 	-rm -f src/or/*.$(OBJEXT)
+	-rm -f src/or/dirauth/*.$(OBJEXT)
 	-rm -f src/test/*.$(OBJEXT)
 	-rm -f src/test/fuzz/*.$(OBJEXT)
 	-rm -f src/tools/*.$(OBJEXT)
@@ -5247,12 +5395,15 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/container.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_curve25519.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_digest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_ed25519.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_format.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_openssl_mgt.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_pwbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_rand.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_rsa.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_s2k.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/crypto_util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/log.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/memarea.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/procmon.Po@am__quote@
@@ -5267,12 +5418,15 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-compress_zstd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_curve25519.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_ed25519.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_openssl_mgt.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_pwbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_s2k.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-tortls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_ctime_a-di_ops.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_ctime_testing_a-di_ops.Po@am__quote@
@@ -5295,6 +5449,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-pubsub.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-sandbox.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-storagedir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-util_bug.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-util_format.Po@am__quote@
@@ -5302,6 +5457,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_libor_testing_a-workqueue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/storagedir.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/timers.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/token_bucket.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/tortls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/util_bug.Po@am__quote@
@@ -5390,10 +5546,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/consdiffmgr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/control.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/cpuworker.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/dircollate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/directory.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/dirserv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/dirvote.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/dns.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/dnsserv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/dos.Po@am__quote@
@@ -5439,6 +5593,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/protover_rust.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/reasons.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/relay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/relay_crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/rendcache.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/rendclient.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/rendcommon.Po@am__quote@
@@ -5454,8 +5609,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/scheduler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/scheduler_kist.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/scheduler_vanilla.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/shared_random.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/shared_random_state.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/shared_random_client.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-addressmap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-bridges.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-channel.Po@am__quote@
@@ -5479,10 +5633,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-consdiffmgr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-control.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-cpuworker.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-directory.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-dirserv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-dns.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-dnsserv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-dos.Po@am__quote@
@@ -5528,6 +5680,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-protover_rust.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-reasons.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-relay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-rendcache.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-rendclient.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-rendcommon.Po@am__quote@
@@ -5543,13 +5696,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-scheduler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-scheduler_kist.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-scheduler_vanilla.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-statefile.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-status.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-tor_api.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-torcert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-transports.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/src_or_tor_cov-tor_main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/statefile.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/status.Po@am__quote@
@@ -5557,6 +5710,15 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/tor_main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/torcert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/transports.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/$(DEPDIR)/voting_schedule.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/dircollate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/dirvote.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/shared_random.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/shared_random_state.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/bench.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-hs_test_helpers.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-log_test_helpers.Po@am__quote@
@@ -5566,7 +5728,9 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_addr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_address.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_address_set.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_bridges.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_buffers.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_bwmgt.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_cell_formats.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_cell_queue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_channel.Po@am__quote@
@@ -5598,6 +5762,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_entryconn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_entrynodes.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_extorport.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_geoip.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_guardfraction.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_handles.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_helpers.Po@am__quote@
@@ -5616,11 +5781,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_keypin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_link_handshake.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_logging.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_mainloop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_microdesc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_nodelist.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_oom.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_oos.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_options.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_periodic_event.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_policy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_procmon.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_proto_http.Po@am__quote@
@@ -5630,6 +5797,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_pubsub.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_relay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_relaycell.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_rendcache.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_replay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_router.Po@am__quote@
@@ -5646,6 +5814,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_util_format.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_util_process.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-testing_common.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test-testing_rsakeys.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/src_test_test_bt_cl-test_bt_cl.Po@am__quote@
@@ -5912,19 +6081,33 @@ src/common/src_common_libor_crypto_testi
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto.obj `if test -f 'src/common/crypto.c'; then $(CYGPATH_W) 'src/common/crypto.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto.c'; fi`
 
-src/common/src_common_libor_crypto_testing_a-crypto_rsa.o: src/common/crypto_rsa.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_rsa.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.o `test -f 'src/common/crypto_rsa.c' || echo '$(srcdir)/'`src/common/crypto_rsa.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_rsa.c' object='src/common/src_common_libor_crypto_testing_a-crypto_rsa.o' libtool=no @AMDEPBACKSLASH@
+src/common/src_common_libor_crypto_testing_a-crypto_digest.o: src/common/crypto_digest.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_digest.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_digest.o `test -f 'src/common/crypto_digest.c' || echo '$(srcdir)/'`src/common/crypto_digest.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_digest.c' object='src/common/src_common_libor_crypto_testing_a-crypto_digest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_digest.o `test -f 'src/common/crypto_digest.c' || echo '$(srcdir)/'`src/common/crypto_digest.c
+
+src/common/src_common_libor_crypto_testing_a-crypto_digest.obj: src/common/crypto_digest.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_digest.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_digest.obj `if test -f 'src/common/crypto_digest.c'; then $(CYGPATH_W) 'src/common/crypto_digest.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_digest.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_digest.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_digest.c' object='src/common/src_common_libor_crypto_testing_a-crypto_digest.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.o `test -f 'src/common/crypto_rsa.c' || echo '$(srcdir)/'`src/common/crypto_rsa.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_digest.obj `if test -f 'src/common/crypto_digest.c'; then $(CYGPATH_W) 'src/common/crypto_digest.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_digest.c'; fi`
 
-src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj: src/common/crypto_rsa.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj `if test -f 'src/common/crypto_rsa.c'; then $(CYGPATH_W) 'src/common/crypto_rsa.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_rsa.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_rsa.c' object='src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj' libtool=no @AMDEPBACKSLASH@
+src/common/src_common_libor_crypto_testing_a-crypto_format.o: src/common/crypto_format.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_format.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.o `test -f 'src/common/crypto_format.c' || echo '$(srcdir)/'`src/common/crypto_format.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_format.c' object='src/common/src_common_libor_crypto_testing_a-crypto_format.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj `if test -f 'src/common/crypto_rsa.c'; then $(CYGPATH_W) 'src/common/crypto_rsa.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_rsa.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.o `test -f 'src/common/crypto_format.c' || echo '$(srcdir)/'`src/common/crypto_format.c
+
+src/common/src_common_libor_crypto_testing_a-crypto_format.obj: src/common/crypto_format.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_format.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.obj `if test -f 'src/common/crypto_format.c'; then $(CYGPATH_W) 'src/common/crypto_format.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_format.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_format.c' object='src/common/src_common_libor_crypto_testing_a-crypto_format.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.obj `if test -f 'src/common/crypto_format.c'; then $(CYGPATH_W) 'src/common/crypto_format.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_format.c'; fi`
 
 src/common/src_common_libor_crypto_testing_a-crypto_openssl_mgt.o: src/common/crypto_openssl_mgt.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_openssl_mgt.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_openssl_mgt.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_openssl_mgt.o `test -f 'src/common/crypto_openssl_mgt.c' || echo '$(srcdir)/'`src/common/crypto_openssl_mgt.c
@@ -5954,6 +6137,34 @@ src/common/src_common_libor_crypto_testi
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_pwbox.obj `if test -f 'src/common/crypto_pwbox.c'; then $(CYGPATH_W) 'src/common/crypto_pwbox.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_pwbox.c'; fi`
 
+src/common/src_common_libor_crypto_testing_a-crypto_rand.o: src/common/crypto_rand.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_rand.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_rand.o `test -f 'src/common/crypto_rand.c' || echo '$(srcdir)/'`src/common/crypto_rand.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_rand.c' object='src/common/src_common_libor_crypto_testing_a-crypto_rand.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_rand.o `test -f 'src/common/crypto_rand.c' || echo '$(srcdir)/'`src/common/crypto_rand.c
+
+src/common/src_common_libor_crypto_testing_a-crypto_rand.obj: src/common/crypto_rand.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_rand.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_rand.obj `if test -f 'src/common/crypto_rand.c'; then $(CYGPATH_W) 'src/common/crypto_rand.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_rand.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rand.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_rand.c' object='src/common/src_common_libor_crypto_testing_a-crypto_rand.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_rand.obj `if test -f 'src/common/crypto_rand.c'; then $(CYGPATH_W) 'src/common/crypto_rand.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_rand.c'; fi`
+
+src/common/src_common_libor_crypto_testing_a-crypto_rsa.o: src/common/crypto_rsa.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_rsa.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.o `test -f 'src/common/crypto_rsa.c' || echo '$(srcdir)/'`src/common/crypto_rsa.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_rsa.c' object='src/common/src_common_libor_crypto_testing_a-crypto_rsa.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.o `test -f 'src/common/crypto_rsa.c' || echo '$(srcdir)/'`src/common/crypto_rsa.c
+
+src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj: src/common/crypto_rsa.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj `if test -f 'src/common/crypto_rsa.c'; then $(CYGPATH_W) 'src/common/crypto_rsa.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_rsa.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_rsa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_rsa.c' object='src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_rsa.obj `if test -f 'src/common/crypto_rsa.c'; then $(CYGPATH_W) 'src/common/crypto_rsa.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_rsa.c'; fi`
+
 src/common/src_common_libor_crypto_testing_a-crypto_s2k.o: src/common/crypto_s2k.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_s2k.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_s2k.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_s2k.o `test -f 'src/common/crypto_s2k.c' || echo '$(srcdir)/'`src/common/crypto_s2k.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_s2k.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_s2k.Po
@@ -5968,19 +6179,19 @@ src/common/src_common_libor_crypto_testi
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_s2k.obj `if test -f 'src/common/crypto_s2k.c'; then $(CYGPATH_W) 'src/common/crypto_s2k.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_s2k.c'; fi`
 
-src/common/src_common_libor_crypto_testing_a-crypto_format.o: src/common/crypto_format.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_format.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.o `test -f 'src/common/crypto_format.c' || echo '$(srcdir)/'`src/common/crypto_format.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_format.c' object='src/common/src_common_libor_crypto_testing_a-crypto_format.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.o `test -f 'src/common/crypto_format.c' || echo '$(srcdir)/'`src/common/crypto_format.c
-
-src/common/src_common_libor_crypto_testing_a-crypto_format.obj: src/common/crypto_format.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_format.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.obj `if test -f 'src/common/crypto_format.c'; then $(CYGPATH_W) 'src/common/crypto_format.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_format.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_format.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_format.c' object='src/common/src_common_libor_crypto_testing_a-crypto_format.obj' libtool=no @AMDEPBACKSLASH@
+src/common/src_common_libor_crypto_testing_a-crypto_util.o: src/common/crypto_util.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_util.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_util.o `test -f 'src/common/crypto_util.c' || echo '$(srcdir)/'`src/common/crypto_util.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_util.c' object='src/common/src_common_libor_crypto_testing_a-crypto_util.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_util.o `test -f 'src/common/crypto_util.c' || echo '$(srcdir)/'`src/common/crypto_util.c
+
+src/common/src_common_libor_crypto_testing_a-crypto_util.obj: src/common/crypto_util.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-crypto_util.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Tpo -c -o src/common/src_common_libor_crypto_testing_a-crypto_util.obj `if test -f 'src/common/crypto_util.c'; then $(CYGPATH_W) 'src/common/crypto_util.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_util.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Tpo src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-crypto_util.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/crypto_util.c' object='src/common/src_common_libor_crypto_testing_a-crypto_util.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_format.obj `if test -f 'src/common/crypto_format.c'; then $(CYGPATH_W) 'src/common/crypto_format.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_format.c'; fi`
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_crypto_testing_a-crypto_util.obj `if test -f 'src/common/crypto_util.c'; then $(CYGPATH_W) 'src/common/crypto_util.c'; else $(CYGPATH_W) '$(srcdir)/src/common/crypto_util.c'; fi`
 
 src/common/src_common_libor_crypto_testing_a-tortls.o: src/common/tortls.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_crypto_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_crypto_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_crypto_testing_a-tortls.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_crypto_testing_a-tortls.Tpo -c -o src/common/src_common_libor_crypto_testing_a-tortls.o `test -f 'src/common/tortls.c' || echo '$(srcdir)/'`src/common/tortls.c
@@ -6416,6 +6627,20 @@ src/common/src_common_libor_testing_a-st
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_testing_a-storagedir.obj `if test -f 'src/common/storagedir.c'; then $(CYGPATH_W) 'src/common/storagedir.c'; else $(CYGPATH_W) '$(srcdir)/src/common/storagedir.c'; fi`
 
+src/common/src_common_libor_testing_a-token_bucket.o: src/common/token_bucket.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_testing_a-token_bucket.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Tpo -c -o src/common/src_common_libor_testing_a-token_bucket.o `test -f 'src/common/token_bucket.c' || echo '$(srcdir)/'`src/common/token_bucket.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Tpo src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/token_bucket.c' object='src/common/src_common_libor_testing_a-token_bucket.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_testing_a-token_bucket.o `test -f 'src/common/token_bucket.c' || echo '$(srcdir)/'`src/common/token_bucket.c
+
+src/common/src_common_libor_testing_a-token_bucket.obj: src/common/token_bucket.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_testing_a-token_bucket.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Tpo -c -o src/common/src_common_libor_testing_a-token_bucket.obj `if test -f 'src/common/token_bucket.c'; then $(CYGPATH_W) 'src/common/token_bucket.c'; else $(CYGPATH_W) '$(srcdir)/src/common/token_bucket.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Tpo src/common/$(DEPDIR)/src_common_libor_testing_a-token_bucket.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/common/token_bucket.c' object='src/common/src_common_libor_testing_a-token_bucket.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_testing_a_CFLAGS) $(CFLAGS) -c -o src/common/src_common_libor_testing_a-token_bucket.obj `if test -f 'src/common/token_bucket.c'; then $(CYGPATH_W) 'src/common/token_bucket.c'; else $(CYGPATH_W) '$(srcdir)/src/common/token_bucket.c'; fi`
+
 src/common/src_common_libor_testing_a-workqueue.o: src/common/workqueue.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_libor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_common_libor_testing_a_CFLAGS) $(CFLAGS) -MT src/common/src_common_libor_testing_a-workqueue.o -MD -MP -MF src/common/$(DEPDIR)/src_common_libor_testing_a-workqueue.Tpo -c -o src/common/src_common_libor_testing_a-workqueue.o `test -f 'src/common/workqueue.c' || echo '$(srcdir)/'`src/common/workqueue.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/common/$(DEPDIR)/src_common_libor_testing_a-workqueue.Tpo src/common/$(DEPDIR)/src_common_libor_testing_a-workqueue.Po
@@ -7410,20 +7635,6 @@ src/or/src_or_libtor_testing_a-cpuworker
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-cpuworker.obj `if test -f 'src/or/cpuworker.c'; then $(CYGPATH_W) 'src/or/cpuworker.c'; else $(CYGPATH_W) '$(srcdir)/src/or/cpuworker.c'; fi`
 
-src/or/src_or_libtor_testing_a-dircollate.o: src/or/dircollate.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-dircollate.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo -c -o src/or/src_or_libtor_testing_a-dircollate.o `test -f 'src/or/dircollate.c' || echo '$(srcdir)/'`src/or/dircollate.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dircollate.c' object='src/or/src_or_libtor_testing_a-dircollate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-dircollate.o `test -f 'src/or/dircollate.c' || echo '$(srcdir)/'`src/or/dircollate.c
-
-src/or/src_or_libtor_testing_a-dircollate.obj: src/or/dircollate.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-dircollate.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo -c -o src/or/src_or_libtor_testing_a-dircollate.obj `if test -f 'src/or/dircollate.c'; then $(CYGPATH_W) 'src/or/dircollate.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dircollate.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dircollate.c' object='src/or/src_or_libtor_testing_a-dircollate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-dircollate.obj `if test -f 'src/or/dircollate.c'; then $(CYGPATH_W) 'src/or/dircollate.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dircollate.c'; fi`
-
 src/or/src_or_libtor_testing_a-directory.o: src/or/directory.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-directory.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-directory.Tpo -c -o src/or/src_or_libtor_testing_a-directory.o `test -f 'src/or/directory.c' || echo '$(srcdir)/'`src/or/directory.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-directory.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-directory.Po
@@ -7452,20 +7663,6 @@ src/or/src_or_libtor_testing_a-dirserv.o
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-dirserv.obj `if test -f 'src/or/dirserv.c'; then $(CYGPATH_W) 'src/or/dirserv.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirserv.c'; fi`
 
-src/or/src_or_libtor_testing_a-dirvote.o: src/or/dirvote.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-dirvote.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo -c -o src/or/src_or_libtor_testing_a-dirvote.o `test -f 'src/or/dirvote.c' || echo '$(srcdir)/'`src/or/dirvote.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirvote.c' object='src/or/src_or_libtor_testing_a-dirvote.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-dirvote.o `test -f 'src/or/dirvote.c' || echo '$(srcdir)/'`src/or/dirvote.c
-
-src/or/src_or_libtor_testing_a-dirvote.obj: src/or/dirvote.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-dirvote.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo -c -o src/or/src_or_libtor_testing_a-dirvote.obj `if test -f 'src/or/dirvote.c'; then $(CYGPATH_W) 'src/or/dirvote.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirvote.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirvote.c' object='src/or/src_or_libtor_testing_a-dirvote.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-dirvote.obj `if test -f 'src/or/dirvote.c'; then $(CYGPATH_W) 'src/or/dirvote.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirvote.c'; fi`
-
 src/or/src_or_libtor_testing_a-dns.o: src/or/dns.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-dns.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-dns.Tpo -c -o src/or/src_or_libtor_testing_a-dns.o `test -f 'src/or/dns.c' || echo '$(srcdir)/'`src/or/dns.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-dns.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-dns.Po
@@ -7900,34 +8097,6 @@ src/or/src_or_libtor_testing_a-onion_tap
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-onion_tap.obj `if test -f 'src/or/onion_tap.c'; then $(CYGPATH_W) 'src/or/onion_tap.c'; else $(CYGPATH_W) '$(srcdir)/src/or/onion_tap.c'; fi`
 
-src/or/src_or_libtor_testing_a-shared_random.o: src/or/shared_random.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-shared_random.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo -c -o src/or/src_or_libtor_testing_a-shared_random.o `test -f 'src/or/shared_random.c' || echo '$(srcdir)/'`src/or/shared_random.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/shared_random.c' object='src/or/src_or_libtor_testing_a-shared_random.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-shared_random.o `test -f 'src/or/shared_random.c' || echo '$(srcdir)/'`src/or/shared_random.c
-
-src/or/src_or_libtor_testing_a-shared_random.obj: src/or/shared_random.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-shared_random.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo -c -o src/or/src_or_libtor_testing_a-shared_random.obj `if test -f 'src/or/shared_random.c'; then $(CYGPATH_W) 'src/or/shared_random.c'; else $(CYGPATH_W) '$(srcdir)/src/or/shared_random.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/shared_random.c' object='src/or/src_or_libtor_testing_a-shared_random.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-shared_random.obj `if test -f 'src/or/shared_random.c'; then $(CYGPATH_W) 'src/or/shared_random.c'; else $(CYGPATH_W) '$(srcdir)/src/or/shared_random.c'; fi`
-
-src/or/src_or_libtor_testing_a-shared_random_state.o: src/or/shared_random_state.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-shared_random_state.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo -c -o src/or/src_or_libtor_testing_a-shared_random_state.o `test -f 'src/or/shared_random_state.c' || echo '$(srcdir)/'`src/or/shared_random_state.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/shared_random_state.c' object='src/or/src_or_libtor_testing_a-shared_random_state.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-shared_random_state.o `test -f 'src/or/shared_random_state.c' || echo '$(srcdir)/'`src/or/shared_random_state.c
-
-src/or/src_or_libtor_testing_a-shared_random_state.obj: src/or/shared_random_state.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-shared_random_state.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo -c -o src/or/src_or_libtor_testing_a-shared_random_state.obj `if test -f 'src/or/shared_random_state.c'; then $(CYGPATH_W) 'src/or/shared_random_state.c'; else $(CYGPATH_W) '$(srcdir)/src/or/shared_random_state.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/shared_random_state.c' object='src/or/src_or_libtor_testing_a-shared_random_state.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-shared_random_state.obj `if test -f 'src/or/shared_random_state.c'; then $(CYGPATH_W) 'src/or/shared_random_state.c'; else $(CYGPATH_W) '$(srcdir)/src/or/shared_random_state.c'; fi`
-
 src/or/src_or_libtor_testing_a-transports.o: src/or/transports.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-transports.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-transports.Tpo -c -o src/or/src_or_libtor_testing_a-transports.o `test -f 'src/or/transports.c' || echo '$(srcdir)/'`src/or/transports.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-transports.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-transports.Po
@@ -8110,6 +8279,20 @@ src/or/src_or_libtor_testing_a-relay.obj
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-relay.obj `if test -f 'src/or/relay.c'; then $(CYGPATH_W) 'src/or/relay.c'; else $(CYGPATH_W) '$(srcdir)/src/or/relay.c'; fi`
 
+src/or/src_or_libtor_testing_a-relay_crypto.o: src/or/relay_crypto.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-relay_crypto.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Tpo -c -o src/or/src_or_libtor_testing_a-relay_crypto.o `test -f 'src/or/relay_crypto.c' || echo '$(srcdir)/'`src/or/relay_crypto.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/relay_crypto.c' object='src/or/src_or_libtor_testing_a-relay_crypto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-relay_crypto.o `test -f 'src/or/relay_crypto.c' || echo '$(srcdir)/'`src/or/relay_crypto.c
+
+src/or/src_or_libtor_testing_a-relay_crypto.obj: src/or/relay_crypto.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-relay_crypto.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Tpo -c -o src/or/src_or_libtor_testing_a-relay_crypto.obj `if test -f 'src/or/relay_crypto.c'; then $(CYGPATH_W) 'src/or/relay_crypto.c'; else $(CYGPATH_W) '$(srcdir)/src/or/relay_crypto.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-relay_crypto.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/relay_crypto.c' object='src/or/src_or_libtor_testing_a-relay_crypto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-relay_crypto.obj `if test -f 'src/or/relay_crypto.c'; then $(CYGPATH_W) 'src/or/relay_crypto.c'; else $(CYGPATH_W) '$(srcdir)/src/or/relay_crypto.c'; fi`
+
 src/or/src_or_libtor_testing_a-rendcache.o: src/or/rendcache.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-rendcache.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-rendcache.Tpo -c -o src/or/src_or_libtor_testing_a-rendcache.o `test -f 'src/or/rendcache.c' || echo '$(srcdir)/'`src/or/rendcache.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-rendcache.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-rendcache.Po
@@ -8320,6 +8503,20 @@ src/or/src_or_libtor_testing_a-scheduler
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-scheduler_vanilla.obj `if test -f 'src/or/scheduler_vanilla.c'; then $(CYGPATH_W) 'src/or/scheduler_vanilla.c'; else $(CYGPATH_W) '$(srcdir)/src/or/scheduler_vanilla.c'; fi`
 
+src/or/src_or_libtor_testing_a-shared_random_client.o: src/or/shared_random_client.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-shared_random_client.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Tpo -c -o src/or/src_or_libtor_testing_a-shared_random_client.o `test -f 'src/or/shared_random_client.c' || echo '$(srcdir)/'`src/or/shared_random_client.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/shared_random_client.c' object='src/or/src_or_libtor_testing_a-shared_random_client.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-shared_random_client.o `test -f 'src/or/shared_random_client.c' || echo '$(srcdir)/'`src/or/shared_random_client.c
+
+src/or/src_or_libtor_testing_a-shared_random_client.obj: src/or/shared_random_client.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-shared_random_client.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Tpo -c -o src/or/src_or_libtor_testing_a-shared_random_client.obj `if test -f 'src/or/shared_random_client.c'; then $(CYGPATH_W) 'src/or/shared_random_client.c'; else $(CYGPATH_W) '$(srcdir)/src/or/shared_random_client.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-shared_random_client.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/shared_random_client.c' object='src/or/src_or_libtor_testing_a-shared_random_client.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-shared_random_client.obj `if test -f 'src/or/shared_random_client.c'; then $(CYGPATH_W) 'src/or/shared_random_client.c'; else $(CYGPATH_W) '$(srcdir)/src/or/shared_random_client.c'; fi`
+
 src/or/src_or_libtor_testing_a-statefile.o: src/or/statefile.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-statefile.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-statefile.Tpo -c -o src/or/src_or_libtor_testing_a-statefile.o `test -f 'src/or/statefile.c' || echo '$(srcdir)/'`src/or/statefile.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-statefile.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-statefile.Po
@@ -8376,6 +8573,20 @@ src/or/src_or_libtor_testing_a-tor_api.o
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-tor_api.obj `if test -f 'src/or/tor_api.c'; then $(CYGPATH_W) 'src/or/tor_api.c'; else $(CYGPATH_W) '$(srcdir)/src/or/tor_api.c'; fi`
 
+src/or/src_or_libtor_testing_a-voting_schedule.o: src/or/voting_schedule.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-voting_schedule.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Tpo -c -o src/or/src_or_libtor_testing_a-voting_schedule.o `test -f 'src/or/voting_schedule.c' || echo '$(srcdir)/'`src/or/voting_schedule.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/voting_schedule.c' object='src/or/src_or_libtor_testing_a-voting_schedule.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-voting_schedule.o `test -f 'src/or/voting_schedule.c' || echo '$(srcdir)/'`src/or/voting_schedule.c
+
+src/or/src_or_libtor_testing_a-voting_schedule.obj: src/or/voting_schedule.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-voting_schedule.obj -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Tpo -c -o src/or/src_or_libtor_testing_a-voting_schedule.obj `if test -f 'src/or/voting_schedule.c'; then $(CYGPATH_W) 'src/or/voting_schedule.c'; else $(CYGPATH_W) '$(srcdir)/src/or/voting_schedule.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-voting_schedule.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/voting_schedule.c' object='src/or/src_or_libtor_testing_a-voting_schedule.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-voting_schedule.obj `if test -f 'src/or/voting_schedule.c'; then $(CYGPATH_W) 'src/or/voting_schedule.c'; else $(CYGPATH_W) '$(srcdir)/src/or/voting_schedule.c'; fi`
+
 src/or/src_or_libtor_testing_a-onion_ntor.o: src/or/onion_ntor.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/src_or_libtor_testing_a-onion_ntor.o -MD -MP -MF src/or/$(DEPDIR)/src_or_libtor_testing_a-onion_ntor.Tpo -c -o src/or/src_or_libtor_testing_a-onion_ntor.o `test -f 'src/or/onion_ntor.c' || echo '$(srcdir)/'`src/or/onion_ntor.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/$(DEPDIR)/src_or_libtor_testing_a-onion_ntor.Tpo src/or/$(DEPDIR)/src_or_libtor_testing_a-onion_ntor.Po
@@ -8404,6 +8615,62 @@ src/or/src_or_libtor_testing_a-ntmain.ob
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/src_or_libtor_testing_a-ntmain.obj `if test -f 'src/or/ntmain.c'; then $(CYGPATH_W) 'src/or/ntmain.c'; else $(CYGPATH_W) '$(srcdir)/src/or/ntmain.c'; fi`
 
+src/or/dirauth/src_or_libtor_testing_a-dircollate.o: src/or/dirauth/dircollate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-dircollate.o -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-dircollate.o `test -f 'src/or/dirauth/dircollate.c' || echo '$(srcdir)/'`src/or/dirauth/dircollate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/dircollate.c' object='src/or/dirauth/src_or_libtor_testing_a-dircollate.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-dircollate.o `test -f 'src/or/dirauth/dircollate.c' || echo '$(srcdir)/'`src/or/dirauth/dircollate.c
+
+src/or/dirauth/src_or_libtor_testing_a-dircollate.obj: src/or/dirauth/dircollate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-dircollate.obj -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-dircollate.obj `if test -f 'src/or/dirauth/dircollate.c'; then $(CYGPATH_W) 'src/or/dirauth/dircollate.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/dircollate.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dircollate.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/dircollate.c' object='src/or/dirauth/src_or_libtor_testing_a-dircollate.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-dircollate.obj `if test -f 'src/or/dirauth/dircollate.c'; then $(CYGPATH_W) 'src/or/dirauth/dircollate.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/dircollate.c'; fi`
+
+src/or/dirauth/src_or_libtor_testing_a-dirvote.o: src/or/dirauth/dirvote.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-dirvote.o -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-dirvote.o `test -f 'src/or/dirauth/dirvote.c' || echo '$(srcdir)/'`src/or/dirauth/dirvote.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/dirvote.c' object='src/or/dirauth/src_or_libtor_testing_a-dirvote.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-dirvote.o `test -f 'src/or/dirauth/dirvote.c' || echo '$(srcdir)/'`src/or/dirauth/dirvote.c
+
+src/or/dirauth/src_or_libtor_testing_a-dirvote.obj: src/or/dirauth/dirvote.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-dirvote.obj -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-dirvote.obj `if test -f 'src/or/dirauth/dirvote.c'; then $(CYGPATH_W) 'src/or/dirauth/dirvote.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/dirvote.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-dirvote.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/dirvote.c' object='src/or/dirauth/src_or_libtor_testing_a-dirvote.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-dirvote.obj `if test -f 'src/or/dirauth/dirvote.c'; then $(CYGPATH_W) 'src/or/dirauth/dirvote.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/dirvote.c'; fi`
+
+src/or/dirauth/src_or_libtor_testing_a-shared_random.o: src/or/dirauth/shared_random.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-shared_random.o -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random.o `test -f 'src/or/dirauth/shared_random.c' || echo '$(srcdir)/'`src/or/dirauth/shared_random.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/shared_random.c' object='src/or/dirauth/src_or_libtor_testing_a-shared_random.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random.o `test -f 'src/or/dirauth/shared_random.c' || echo '$(srcdir)/'`src/or/dirauth/shared_random.c
+
+src/or/dirauth/src_or_libtor_testing_a-shared_random.obj: src/or/dirauth/shared_random.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-shared_random.obj -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random.obj `if test -f 'src/or/dirauth/shared_random.c'; then $(CYGPATH_W) 'src/or/dirauth/shared_random.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/shared_random.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/shared_random.c' object='src/or/dirauth/src_or_libtor_testing_a-shared_random.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random.obj `if test -f 'src/or/dirauth/shared_random.c'; then $(CYGPATH_W) 'src/or/dirauth/shared_random.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/shared_random.c'; fi`
+
+src/or/dirauth/src_or_libtor_testing_a-shared_random_state.o: src/or/dirauth/shared_random_state.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-shared_random_state.o -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random_state.o `test -f 'src/or/dirauth/shared_random_state.c' || echo '$(srcdir)/'`src/or/dirauth/shared_random_state.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/shared_random_state.c' object='src/or/dirauth/src_or_libtor_testing_a-shared_random_state.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random_state.o `test -f 'src/or/dirauth/shared_random_state.c' || echo '$(srcdir)/'`src/or/dirauth/shared_random_state.c
+
+src/or/dirauth/src_or_libtor_testing_a-shared_random_state.obj: src/or/dirauth/shared_random_state.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -MT src/or/dirauth/src_or_libtor_testing_a-shared_random_state.obj -MD -MP -MF src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random_state.obj `if test -f 'src/or/dirauth/shared_random_state.c'; then $(CYGPATH_W) 'src/or/dirauth/shared_random_state.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/shared_random_state.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Tpo src/or/dirauth/$(DEPDIR)/src_or_libtor_testing_a-shared_random_state.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/or/dirauth/shared_random_state.c' object='src/or/dirauth/src_or_libtor_testing_a-shared_random_state.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_or_libtor_testing_a_CPPFLAGS) $(CPPFLAGS) $(src_or_libtor_testing_a_CFLAGS) $(CFLAGS) -c -o src/or/dirauth/src_or_libtor_testing_a-shared_random_state.obj `if test -f 'src/or/dirauth/shared_random_state.c'; then $(CYGPATH_W) 'src/or/dirauth/shared_random_state.c'; else $(CYGPATH_W) '$(srcdir)/src/or/dirauth/shared_random_state.c'; fi`
+
 src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.o: src/test/fuzz/fuzzing_common.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_fuzz_liboss_fuzz_consensus_a_CPPFLAGS) $(CPPFLAGS) $(src_test_fuzz_liboss_fuzz_consensus_a_CFLAGS) $(CFLAGS) -MT src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.o -MD -MP -MF src/test/fuzz/$(DEPDIR)/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.Tpo -c -o src/test/fuzz/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.o `test -f 'src/test/fuzz/fuzzing_common.c' || echo '$(srcdir)/'`src/test/fuzz/fuzzing_common.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/fuzz/$(DEPDIR)/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.Tpo src/test/fuzz/$(DEPDIR)/src_test_fuzz_liboss_fuzz_consensus_a-fuzzing_common.Po
@@ -9790,6 +10057,20 @@ src/test/src_test_test-test_address_set.
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_address_set.obj `if test -f 'src/test/test_address_set.c'; then $(CYGPATH_W) 'src/test/test_address_set.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_address_set.c'; fi`
 
+src/test/src_test_test-test_bridges.o: src/test/test_bridges.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_bridges.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_bridges.Tpo -c -o src/test/src_test_test-test_bridges.o `test -f 'src/test/test_bridges.c' || echo '$(srcdir)/'`src/test/test_bridges.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_bridges.Tpo src/test/$(DEPDIR)/src_test_test-test_bridges.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_bridges.c' object='src/test/src_test_test-test_bridges.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_bridges.o `test -f 'src/test/test_bridges.c' || echo '$(srcdir)/'`src/test/test_bridges.c
+
+src/test/src_test_test-test_bridges.obj: src/test/test_bridges.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_bridges.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_bridges.Tpo -c -o src/test/src_test_test-test_bridges.obj `if test -f 'src/test/test_bridges.c'; then $(CYGPATH_W) 'src/test/test_bridges.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_bridges.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_bridges.Tpo src/test/$(DEPDIR)/src_test_test-test_bridges.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_bridges.c' object='src/test/src_test_test-test_bridges.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_bridges.obj `if test -f 'src/test/test_bridges.c'; then $(CYGPATH_W) 'src/test/test_bridges.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_bridges.c'; fi`
+
 src/test/src_test_test-test_buffers.o: src/test/test_buffers.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_buffers.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_buffers.Tpo -c -o src/test/src_test_test-test_buffers.o `test -f 'src/test/test_buffers.c' || echo '$(srcdir)/'`src/test/test_buffers.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_buffers.Tpo src/test/$(DEPDIR)/src_test_test-test_buffers.Po
@@ -9804,6 +10085,20 @@ src/test/src_test_test-test_buffers.obj:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_buffers.obj `if test -f 'src/test/test_buffers.c'; then $(CYGPATH_W) 'src/test/test_buffers.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_buffers.c'; fi`
 
+src/test/src_test_test-test_bwmgt.o: src/test/test_bwmgt.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_bwmgt.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_bwmgt.Tpo -c -o src/test/src_test_test-test_bwmgt.o `test -f 'src/test/test_bwmgt.c' || echo '$(srcdir)/'`src/test/test_bwmgt.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_bwmgt.Tpo src/test/$(DEPDIR)/src_test_test-test_bwmgt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_bwmgt.c' object='src/test/src_test_test-test_bwmgt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_bwmgt.o `test -f 'src/test/test_bwmgt.c' || echo '$(srcdir)/'`src/test/test_bwmgt.c
+
+src/test/src_test_test-test_bwmgt.obj: src/test/test_bwmgt.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_bwmgt.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_bwmgt.Tpo -c -o src/test/src_test_test-test_bwmgt.obj `if test -f 'src/test/test_bwmgt.c'; then $(CYGPATH_W) 'src/test/test_bwmgt.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_bwmgt.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_bwmgt.Tpo src/test/$(DEPDIR)/src_test_test-test_bwmgt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_bwmgt.c' object='src/test/src_test_test-test_bwmgt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_bwmgt.obj `if test -f 'src/test/test_bwmgt.c'; then $(CYGPATH_W) 'src/test/test_bwmgt.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_bwmgt.c'; fi`
+
 src/test/src_test_test-test_cell_formats.o: src/test/test_cell_formats.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_cell_formats.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_cell_formats.Tpo -c -o src/test/src_test_test-test_cell_formats.o `test -f 'src/test/test_cell_formats.c' || echo '$(srcdir)/'`src/test/test_cell_formats.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_cell_formats.Tpo src/test/$(DEPDIR)/src_test_test-test_cell_formats.Po
@@ -10210,6 +10505,20 @@ src/test/src_test_test-test_entrynodes.o
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_entrynodes.obj `if test -f 'src/test/test_entrynodes.c'; then $(CYGPATH_W) 'src/test/test_entrynodes.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_entrynodes.c'; fi`
 
+src/test/src_test_test-test_geoip.o: src/test/test_geoip.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_geoip.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_geoip.Tpo -c -o src/test/src_test_test-test_geoip.o `test -f 'src/test/test_geoip.c' || echo '$(srcdir)/'`src/test/test_geoip.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_geoip.Tpo src/test/$(DEPDIR)/src_test_test-test_geoip.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_geoip.c' object='src/test/src_test_test-test_geoip.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_geoip.o `test -f 'src/test/test_geoip.c' || echo '$(srcdir)/'`src/test/test_geoip.c
+
+src/test/src_test_test-test_geoip.obj: src/test/test_geoip.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_geoip.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_geoip.Tpo -c -o src/test/src_test_test-test_geoip.obj `if test -f 'src/test/test_geoip.c'; then $(CYGPATH_W) 'src/test/test_geoip.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_geoip.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_geoip.Tpo src/test/$(DEPDIR)/src_test_test-test_geoip.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_geoip.c' object='src/test/src_test_test-test_geoip.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_geoip.obj `if test -f 'src/test/test_geoip.c'; then $(CYGPATH_W) 'src/test/test_geoip.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_geoip.c'; fi`
+
 src/test/src_test_test-test_guardfraction.o: src/test/test_guardfraction.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_guardfraction.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_guardfraction.Tpo -c -o src/test/src_test_test-test_guardfraction.o `test -f 'src/test/test_guardfraction.c' || echo '$(srcdir)/'`src/test/test_guardfraction.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_guardfraction.Tpo src/test/$(DEPDIR)/src_test_test-test_guardfraction.Po
@@ -10462,6 +10771,20 @@ src/test/src_test_test-test_logging.obj:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_logging.obj `if test -f 'src/test/test_logging.c'; then $(CYGPATH_W) 'src/test/test_logging.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_logging.c'; fi`
 
+src/test/src_test_test-test_mainloop.o: src/test/test_mainloop.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_mainloop.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_mainloop.Tpo -c -o src/test/src_test_test-test_mainloop.o `test -f 'src/test/test_mainloop.c' || echo '$(srcdir)/'`src/test/test_mainloop.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_mainloop.Tpo src/test/$(DEPDIR)/src_test_test-test_mainloop.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_mainloop.c' object='src/test/src_test_test-test_mainloop.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_mainloop.o `test -f 'src/test/test_mainloop.c' || echo '$(srcdir)/'`src/test/test_mainloop.c
+
+src/test/src_test_test-test_mainloop.obj: src/test/test_mainloop.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_mainloop.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_mainloop.Tpo -c -o src/test/src_test_test-test_mainloop.obj `if test -f 'src/test/test_mainloop.c'; then $(CYGPATH_W) 'src/test/test_mainloop.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_mainloop.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_mainloop.Tpo src/test/$(DEPDIR)/src_test_test-test_mainloop.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_mainloop.c' object='src/test/src_test_test-test_mainloop.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_mainloop.obj `if test -f 'src/test/test_mainloop.c'; then $(CYGPATH_W) 'src/test/test_mainloop.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_mainloop.c'; fi`
+
 src/test/src_test_test-test_microdesc.o: src/test/test_microdesc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_microdesc.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_microdesc.Tpo -c -o src/test/src_test_test-test_microdesc.o `test -f 'src/test/test_microdesc.c' || echo '$(srcdir)/'`src/test/test_microdesc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_microdesc.Tpo src/test/$(DEPDIR)/src_test_test-test_microdesc.Po
@@ -10532,6 +10855,20 @@ src/test/src_test_test-test_options.obj:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_options.obj `if test -f 'src/test/test_options.c'; then $(CYGPATH_W) 'src/test/test_options.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_options.c'; fi`
 
+src/test/src_test_test-test_periodic_event.o: src/test/test_periodic_event.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_periodic_event.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_periodic_event.Tpo -c -o src/test/src_test_test-test_periodic_event.o `test -f 'src/test/test_periodic_event.c' || echo '$(srcdir)/'`src/test/test_periodic_event.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_periodic_event.Tpo src/test/$(DEPDIR)/src_test_test-test_periodic_event.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_periodic_event.c' object='src/test/src_test_test-test_periodic_event.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_periodic_event.o `test -f 'src/test/test_periodic_event.c' || echo '$(srcdir)/'`src/test/test_periodic_event.c
+
+src/test/src_test_test-test_periodic_event.obj: src/test/test_periodic_event.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_periodic_event.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_periodic_event.Tpo -c -o src/test/src_test_test-test_periodic_event.obj `if test -f 'src/test/test_periodic_event.c'; then $(CYGPATH_W) 'src/test/test_periodic_event.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_periodic_event.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_periodic_event.Tpo src/test/$(DEPDIR)/src_test_test-test_periodic_event.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_periodic_event.c' object='src/test/src_test_test-test_periodic_event.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_periodic_event.obj `if test -f 'src/test/test_periodic_event.c'; then $(CYGPATH_W) 'src/test/test_periodic_event.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_periodic_event.c'; fi`
+
 src/test/src_test_test-test_policy.o: src/test/test_policy.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_policy.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_policy.Tpo -c -o src/test/src_test_test-test_policy.o `test -f 'src/test/test_policy.c' || echo '$(srcdir)/'`src/test/test_policy.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_policy.Tpo src/test/$(DEPDIR)/src_test_test-test_policy.Po
@@ -10658,6 +10995,20 @@ src/test/src_test_test-test_relaycell.ob
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_relaycell.obj `if test -f 'src/test/test_relaycell.c'; then $(CYGPATH_W) 'src/test/test_relaycell.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_relaycell.c'; fi`
 
+src/test/src_test_test-test_relaycrypt.o: src/test/test_relaycrypt.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_relaycrypt.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Tpo -c -o src/test/src_test_test-test_relaycrypt.o `test -f 'src/test/test_relaycrypt.c' || echo '$(srcdir)/'`src/test/test_relaycrypt.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Tpo src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_relaycrypt.c' object='src/test/src_test_test-test_relaycrypt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_relaycrypt.o `test -f 'src/test/test_relaycrypt.c' || echo '$(srcdir)/'`src/test/test_relaycrypt.c
+
+src/test/src_test_test-test_relaycrypt.obj: src/test/test_relaycrypt.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_relaycrypt.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Tpo -c -o src/test/src_test_test-test_relaycrypt.obj `if test -f 'src/test/test_relaycrypt.c'; then $(CYGPATH_W) 'src/test/test_relaycrypt.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_relaycrypt.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Tpo src/test/$(DEPDIR)/src_test_test-test_relaycrypt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_relaycrypt.c' object='src/test/src_test_test-test_relaycrypt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_relaycrypt.obj `if test -f 'src/test/test_relaycrypt.c'; then $(CYGPATH_W) 'src/test/test_relaycrypt.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_relaycrypt.c'; fi`
+
 src/test/src_test_test-test_rendcache.o: src/test/test_rendcache.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_rendcache.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_rendcache.Tpo -c -o src/test/src_test_test-test_rendcache.o `test -f 'src/test/test_rendcache.c' || echo '$(srcdir)/'`src/test/test_rendcache.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_rendcache.Tpo src/test/$(DEPDIR)/src_test_test-test_rendcache.Po
@@ -10882,6 +11233,20 @@ src/test/src_test_test-test_util_process
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_util_process.obj `if test -f 'src/test/test_util_process.c'; then $(CYGPATH_W) 'src/test/test_util_process.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_util_process.c'; fi`
 
+src/test/src_test_test-test_voting_schedule.o: src/test/test_voting_schedule.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_voting_schedule.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Tpo -c -o src/test/src_test_test-test_voting_schedule.o `test -f 'src/test/test_voting_schedule.c' || echo '$(srcdir)/'`src/test/test_voting_schedule.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Tpo src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_voting_schedule.c' object='src/test/src_test_test-test_voting_schedule.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_voting_schedule.o `test -f 'src/test/test_voting_schedule.c' || echo '$(srcdir)/'`src/test/test_voting_schedule.c
+
+src/test/src_test_test-test_voting_schedule.obj: src/test/test_voting_schedule.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_voting_schedule.obj -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Tpo -c -o src/test/src_test_test-test_voting_schedule.obj `if test -f 'src/test/test_voting_schedule.c'; then $(CYGPATH_W) 'src/test/test_voting_schedule.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_voting_schedule.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Tpo src/test/$(DEPDIR)/src_test_test-test_voting_schedule.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/test/test_voting_schedule.c' object='src/test/src_test_test-test_voting_schedule.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -c -o src/test/src_test_test-test_voting_schedule.obj `if test -f 'src/test/test_voting_schedule.c'; then $(CYGPATH_W) 'src/test/test_voting_schedule.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test_voting_schedule.c'; fi`
+
 src/test/src_test_test-test_helpers.o: src/test/test_helpers.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_test_test_CPPFLAGS) $(CPPFLAGS) $(src_test_test_CFLAGS) $(CFLAGS) -MT src/test/src_test_test-test_helpers.o -MD -MP -MF src/test/$(DEPDIR)/src_test_test-test_helpers.Tpo -c -o src/test/src_test_test-test_helpers.o `test -f 'src/test/test_helpers.c' || echo '$(srcdir)/'`src/test/test_helpers.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/test/$(DEPDIR)/src_test_test-test_helpers.Tpo src/test/$(DEPDIR)/src_test_test-test_helpers.Po
@@ -11327,7 +11692,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
 	if test -n "$$am__remaking_logs"; then \
 	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
 	       "recursion detected" >&2; \
-	else \
+	elif test -n "$$redo_logs"; then \
 	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
 	fi; \
 	if $(am__make_dryrun); then :; else \
@@ -11633,7 +11998,7 @@ distdir: $(DISTFILES)
 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
 	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
 	$(am__post_remove_distdir)
 
 dist-bzip2: distdir
@@ -11649,17 +12014,17 @@ dist-xz: distdir
 	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
-	@echo WARNING: "Support for shar distribution archives is" \
-	               "deprecated." >&2
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__post_remove_distdir)
 
 dist-shar: distdir
-	@echo WARNING: "Support for distribution archives compressed with" \
-		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
 
 dist-zip: distdir
@@ -11677,7 +12042,7 @@ dist dist-all:
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lz*) \
@@ -11687,23 +12052,23 @@ distcheck: dist
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
 	chmod -R a-w $(distdir)
 	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
+	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
 	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure \
+	  && $(am__cd) $(distdir)/_build/sub \
+	  && ../../configure \
 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	    --srcdir=.. --prefix="$$dc_install_base" \
+	    --srcdir=../.. --prefix="$$dc_install_base" \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
 	  && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -11815,6 +12180,8 @@ distclean-generic:
 	-rm -f src/ext/trunnel/$(am__dirstamp)
 	-rm -f src/or/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/or/$(am__dirstamp)
+	-rm -f src/or/dirauth/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/or/dirauth/$(am__dirstamp)
 	-rm -f src/test/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/test/$(am__dirstamp)
 	-rm -f src/test/fuzz/$(DEPDIR)/$(am__dirstamp)
@@ -11840,7 +12207,7 @@ clean-am: clean-binPROGRAMS clean-generi
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf src/common/$(DEPDIR) src/ext/$(DEPDIR) src/ext/curve25519_donna/$(DEPDIR) src/ext/ed25519/donna/$(DEPDIR) src/ext/ed25519/ref10/$(DEPDIR) src/ext/keccak-tiny/$(DEPDIR) src/ext/mulodi/$(DEPDIR) src/ext/timeouts/$(DEPDIR) src/ext/trunnel/$(DEPDIR) src/or/$(DEPDIR) src/test/$(DEPDIR) src/test/fuzz/$(DEPDIR) src/tools/$(DEPDIR) src/trace/$(DEPDIR) src/trunnel/$(DEPDIR) src/trunnel/hs/$(DEPDIR)
+	-rm -rf src/common/$(DEPDIR) src/ext/$(DEPDIR) src/ext/curve25519_donna/$(DEPDIR) src/ext/ed25519/donna/$(DEPDIR) src/ext/ed25519/ref10/$(DEPDIR) src/ext/keccak-tiny/$(DEPDIR) src/ext/mulodi/$(DEPDIR) src/ext/timeouts/$(DEPDIR) src/ext/trunnel/$(DEPDIR) src/or/$(DEPDIR) src/or/dirauth/$(DEPDIR) src/test/$(DEPDIR) src/test/fuzz/$(DEPDIR) src/tools/$(DEPDIR) src/trace/$(DEPDIR) src/trunnel/$(DEPDIR) src/trunnel/hs/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-hdr distclean-local distclean-tags
@@ -11889,7 +12256,7 @@ installcheck-am:
 maintainer-clean: maintainer-clean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf src/common/$(DEPDIR) src/ext/$(DEPDIR) src/ext/curve25519_donna/$(DEPDIR) src/ext/ed25519/donna/$(DEPDIR) src/ext/ed25519/ref10/$(DEPDIR) src/ext/keccak-tiny/$(DEPDIR) src/ext/mulodi/$(DEPDIR) src/ext/timeouts/$(DEPDIR) src/ext/trunnel/$(DEPDIR) src/or/$(DEPDIR) src/test/$(DEPDIR) src/test/fuzz/$(DEPDIR) src/tools/$(DEPDIR) src/trace/$(DEPDIR) src/trunnel/$(DEPDIR) src/trunnel/hs/$(DEPDIR)
+	-rm -rf src/common/$(DEPDIR) src/ext/$(DEPDIR) src/ext/curve25519_donna/$(DEPDIR) src/ext/ed25519/donna/$(DEPDIR) src/ext/ed25519/ref10/$(DEPDIR) src/ext/keccak-tiny/$(DEPDIR) src/ext/mulodi/$(DEPDIR) src/ext/timeouts/$(DEPDIR) src/ext/trunnel/$(DEPDIR) src/or/$(DEPDIR) src/or/dirauth/$(DEPDIR) src/test/$(DEPDIR) src/test/fuzz/$(DEPDIR) src/tools/$(DEPDIR) src/trace/$(DEPDIR) src/trunnel/$(DEPDIR) src/trunnel/hs/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -11936,6 +12303,8 @@ uninstall-man: uninstall-man1
 	uninstall-binSCRIPTS uninstall-confDATA uninstall-docDATA \
 	uninstall-man uninstall-man1 uninstall-tordataDATA
 
+.PRECIOUS: Makefile
+
 
 src/common/src_common_libor_testing_a-log.$(OBJEXT) \
   src/common/log.$(OBJEXT): micro-revision.i
@@ -11963,10 +12332,9 @@ micro-revision.i: FORCE
 
 FORCE:
 
-src/rust/target/release/@TOR_RUST_STATIC_NAME@: FORCE
+@TOR_RUST_LIB_PATH@: FORCE
 	( cd "$(abs_top_builddir)/src/rust" ; \
 		CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \
-		CARGO_HOME="$(abs_top_builddir)/src/rust" \
 		$(CARGO) build --release $(EXTRA_CARGO_OPTIONS) \
 	        $(CARGO_ONLINE) \
                 --manifest-path "$(abs_top_srcdir)/src/rust/tor_rust/Cargo.toml" )
@@ -11974,13 +12342,12 @@ src/rust/target/release/@TOR_RUST_STATIC
 distclean-rust:
 	( cd "$(abs_top_builddir)/src/rust" ; \
 		CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \
-		CARGO_HOME="$(abs_top_builddir)/src/rust" \
 		$(CARGO) clean $(EXTRA_CARGO_OPTIONS) \
 	        $(CARGO_ONLINE) \
                 --manifest-path "$(abs_top_srcdir)/src/rust/tor_rust/Cargo.toml" )
 	rm -rf "$(abs_top_builddir)/src/rust/registry"
 
-@USE_RUST_TRUE@build-rust: src/rust/target/release/@TOR_RUST_STATIC_NAME@
+@USE_RUST_TRUE@build-rust: @TOR_RUST_LIB_PATH@
 @USE_RUST_FALSE@build-rust:
 
 FORCE:
@@ -12101,6 +12468,7 @@ test-network: need-chutney-path $(TESTIN
 # because they're incompatible
 test-network-all: need-chutney-path test-driver $(TESTING_TOR_BINARY) src/tools/tor-gencert
 	mkdir -p $(TEST_NETWORK_ALL_LOG_DIR)
+	rm -f $(TEST_NETWORK_ALL_LOG_DIR)/*.log $(TEST_NETWORK_ALL_LOG_DIR)/*.trs
 	@flavors="$(TEST_CHUTNEY_FLAVORS)"; \
 	if ping6 -q -c 1 -o ::1 >/dev/null 2>&1 || ping6 -q -c 1 -W 1 ::1 >/dev/null 2>&1 || ping -6 -c 1 -W 1 ::1 >/dev/null 2>&1; then \
 		echo "ping6 ::1 or ping ::1 succeeded, running IPv6 flavors: $(TEST_CHUTNEY_FLAVORS_IPV6)."; \
@@ -12124,7 +12492,7 @@ test-network-all: need-chutney-path test
 		$(top_srcdir)/src/test/test-network.sh $(TEST_NETWORK_WARNING_FLAGS); \
 	done; \
 	echo "Log and result files are available in $(TEST_NETWORK_ALL_LOG_DIR)."; \
-	! grep -q FAIL test_network_log/*.trs
+	! grep -q FAIL $(TEST_NETWORK_ALL_LOG_DIR)/*.trs
 
 need-stem-path:
 	@if test ! -d "$$STEM_SOURCE_DIR"; then \
@@ -12186,6 +12554,26 @@ check-logs:
 	$(top_srcdir)/scripts/maint/checkLogs.pl \
 		$(top_srcdir)/src/*/*.[ch] | sort -n
 
+.PHONY: check-typos
+check-typos:
+	@if test -x "`which misspell 2>&1;true`"; then \
+		echo "Checking for Typos ..."; \
+		(misspell \
+			$(top_srcdir)/src/[^e]*/*.[ch] \
+			$(top_srcdir)/doc \
+			$(top_srcdir)/contrib \
+			$(top_srcdir)/scripts \
+			$(top_srcdir)/README \
+			$(top_srcdir)/ChangeLog \
+			$(top_srcdir)/INSTALL \
+			$(top_srcdir)/ReleaseNotes \
+			$(top_srcdir)/LICENSE); \
+	else \
+		echo "Tor can use misspell to check for typos."; \
+		echo "It seems that you don't have misspell installed."; \
+		echo "You can install the latest version of misspell here: https://github.com/client9/misspell#install"; \
+	fi
+
 .PHONY: check-changes
 check-changes:
 @USEPYTHON_TRUE@	@if test -d "$(top_srcdir)/changes"; then \
diff -pruN 0.3.3.9-1/micro-revision.i 0.3.4.8-1/micro-revision.i
--- 0.3.3.9-1/micro-revision.i	2018-07-13 18:26:20.000000000 +0000
+++ 0.3.4.8-1/micro-revision.i	2018-09-10 12:48:15.000000000 +0000
@@ -1 +1 @@
-"45028085ea188baf"
+"da95b91355248ad8"
diff -pruN 0.3.3.9-1/missing 0.3.4.8-1/missing
--- 0.3.3.9-1/missing	2018-07-12 17:16:59.000000000 +0000
+++ 0.3.4.8-1/missing	2018-06-25 18:12:07.000000000 +0000
@@ -1,9 +1,9 @@
-#! /bin/sh
+#!/bin/sh
 # Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2013-10-28.13; # UTC
+scriptversion=2016-01-11.22; # UTC
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -210,6 +210,6 @@ exit $st
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -pruN 0.3.3.9-1/orconfig.h.in 0.3.4.8-1/orconfig.h.in
--- 0.3.3.9-1/orconfig.h.in	2018-07-13 18:26:20.000000000 +0000
+++ 0.3.4.8-1/orconfig.h.in	2018-09-07 20:21:29.000000000 +0000
@@ -9,6 +9,9 @@
 /* tor's configuration directory */
 #undef CONFDIR
 
+/* Enable smartlist debugging */
+#undef DEBUG_SMARTLIST
+
 /* Defined if we're turning off memory safety code to look for bugs */
 #undef DISABLE_MEMORY_SENTINELS
 
@@ -24,6 +27,9 @@
 /* Defined if we're building with support for in-process restart debugging. */
 #undef ENABLE_RESTART_DEBUGGING
 
+/* Defined if we're going to try to use zstd's "static-only" APIs. */
+#undef ENABLE_ZSTD_ADVANCED_APIS
+
 /* Define if enum is always signed */
 #undef ENUM_VALS_ARE_SIGNED
 
@@ -63,6 +69,9 @@
 /* True if we have -Woverlength-strings */
 #undef HAVE_CFLAG_WOVERLENGTH_STRINGS
 
+/* True if we have -Wunused-const-variable */
+#undef HAVE_CFLAG_WUNUSED_CONST_VARIABLE
+
 /* Define to 1 if you have the `clock_gettime' function. */
 #undef HAVE_CLOCK_GETTIME
 
@@ -76,10 +85,6 @@
 /* Define to 1 if you have the <cygwin/signal.h> header file. */
 #undef HAVE_CYGWIN_SIGNAL_H
 
-/* Define to 1 if you have the declaration of `getpagesize', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETPAGESIZE
-
 /* Define to 1 if you have the declaration of `mlockall', and to 0 if you
    don't. */
 #undef HAVE_DECL_MLOCKALL
@@ -292,6 +297,12 @@
 /* Define to 1 if you have the `mlockall' function. */
 #undef HAVE_MLOCKALL
 
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Compile with Directory Authority feature support */
+#undef HAVE_MODULE_DIRAUTH
+
 /* Define to 1 if you have the <nacl/crypto_scalarmult_curve25519.h> header
    file. */
 #undef HAVE_NACL_CRYPTO_SCALARMULT_CURVE25519_H
@@ -374,6 +385,9 @@
 /* Define to 1 if you have the `SSL_CIPHER_find' function. */
 #undef HAVE_SSL_CIPHER_FIND
 
+/* Define to 1 if you have the `SSL_CTX_set_security_level' function. */
+#undef HAVE_SSL_CTX_SET_SECURITY_LEVEL
+
 /* Define to 1 if you have the `SSL_get_client_ciphers' function. */
 #undef HAVE_SSL_GET_CLIENT_CIPHERS
 
@@ -582,6 +596,12 @@
 /* Have Zstd */
 #undef HAVE_ZSTD
 
+/* Define to 1 if you have the `ZSTD_estimateCStreamSize' function. */
+#undef HAVE_ZSTD_ESTIMATECSTREAMSIZE
+
+/* Define to 1 if you have the `ZSTD_estimateDCtxSize' function. */
+#undef HAVE_ZSTD_ESTIMATEDCTXSIZE
+
 /* Define to 1 if you have the `_NSGetEnviron' function. */
 #undef HAVE__NSGETENVIRON
 
@@ -657,6 +677,9 @@
 /* The size of `pid_t', as computed by sizeof. */
 #undef SIZEOF_PID_T
 
+/* The size of `SHA_CTX', as computed by sizeof. */
+#undef SIZEOF_SHA_CTX
+
 /* The size of `short', as computed by sizeof. */
 #undef SIZEOF_SHORT
 
@@ -690,6 +713,12 @@
 /* The size of `__int64', as computed by sizeof. */
 #undef SIZEOF___INT64
 
+/* tor's sourcedir directory */
+#undef SRCDIR
+
+/* Set to 1 if we can compile a simple stdatomic example. */
+#undef STDATOMIC_WORKS
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
diff -pruN 0.3.3.9-1/ReleaseNotes 0.3.4.8-1/ReleaseNotes
--- 0.3.3.9-1/ReleaseNotes	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/ReleaseNotes	2018-09-10 12:47:03.000000000 +0000
@@ -2,6 +2,561 @@ This document summarizes new features an
 release of Tor. If you want to see more detailed descriptions of the
 changes in each development snapshot, see the ChangeLog file.
 
+Changes in version 0.3.4.8 - 2018-09-10
+  Tor 0.3.4.8 is the first stable release in its series; it includes
+  compilation and portability fixes.
+
+  The Tor 0.3.4 series includes improvements for running Tor in
+  low-power and embedded environments, which should help performance in
+  general. We've begun work on better modularity, and included preliminary
+  changes on the directory authority side to accommodate a new bandwidth
+  measurement system.  We've also integrated more continuous-integration
+  systems into our development process, and made corresponding changes to
+  Tor's testing infrastructure.  Finally, we've continued to refine
+  our anti-denial-of-service code.
+
+  Below are the changes since 0.3.3.9. For a list of only the changes
+  since 0.3.4.7-rc, see the ChangeLog file.
+
+  o New system requirements:
+    - Tor no longer tries to support old operating systems without
+      mmap() or some local equivalent. Apparently, compilation on such
+      systems has been broken for some time, without anybody noticing or
+      complaining. Closes ticket 25398.
+
+  o Major features (directory authority, modularization):
+    - The directory authority subsystem has been modularized. The code
+      is now located in src/or/dirauth/, and is compiled in by default.
+      To disable the module, the configure option
+      --disable-module-dirauth has been added. This module may be
+      disabled by default in some future release. Closes ticket 25610.
+
+  o Major features (main loop, CPU usage):
+    - When Tor is disabled (via DisableNetwork or via hibernation), it
+      no longer needs to run any per-second events. This change should
+      make it easier for mobile applications to disable Tor while the
+      device is sleeping, or Tor is not running. Closes ticket 26063.
+    - Tor no longer enables all of its periodic events by default.
+      Previously, Tor would enable all possible main loop events,
+      regardless of whether it needed them. Furthermore, many of these
+      events are now disabled when Tor is hibernating or DisableNetwork
+      is set. This is a big step towards reducing client CPU usage by
+      reducing the amount of wake-ups the daemon does. Closes tickets
+      25376 and 25762.
+    - The bandwidth-limitation logic has been refactored so that
+      bandwidth calculations are performed on-demand, rather than every
+      TokenBucketRefillInterval milliseconds. This change should improve
+      the granularity of our bandwidth calculations, and limit the
+      number of times that the Tor process needs to wake up when it is
+      idle. Closes ticket 25373.
+    - Move responsibility for many operations from a once-per-second
+      callback to a callback that is only scheduled as needed. Moving
+      this functionality has allowed us to disable the callback when
+      Tor's network is disabled. Once enough items are removed from our
+      once-per-second callback, we can eliminate it entirely to conserve
+      CPU when idle. The functionality removed includes: closing
+      connections, circuits, and channels (ticket 25932); consensus
+      voting (25937); flushing log callbacks (25951); honoring delayed
+      SIGNEWNYM requests (25949); rescanning the consensus cache
+      (25931); saving the state file to disk (25948); warning relay
+      operators about unreachable ports (25952); and keeping track of
+      Tor's uptime (26009).
+
+  o Minor features (accounting):
+    - When Tor becomes dormant, it now uses a scheduled event to wake up
+      at the right time. Previously, we would use the per-second timer
+      to check whether to wake up, but we no longer have any per-second
+      timers enabled when the network is disabled. Closes ticket 26064.
+
+  o Minor features (bug workaround):
+    - Compile correctly on systems that provide the C11 stdatomic.h
+      header, but where C11 atomic functions don't actually compile.
+      Closes ticket 26779; workaround for Debian issue 903709.
+
+  o Minor features (code quality):
+    - Add optional spell-checking for the Tor codebase, using the
+      "misspell" program. To use this feature, run "make check-typos".
+      Closes ticket 25024.
+
+  o Minor features (compatibility):
+    - Tell OpenSSL to maintain backward compatibility with previous
+      RSA1024/DH1024 users in Tor. With OpenSSL 1.1.1-pre6, these
+      ciphers are disabled by default. Closes ticket 27344.
+    - Tor now detects versions of OpenSSL 1.1.0 and later compiled with
+      the no-deprecated option, and builds correctly with them. Closes
+      tickets 19429, 19981, and 25353.
+
+  o Minor features (compilation):
+    - When compiling with --enable-openbsd-malloc or --enable-tcmalloc,
+      tell the compiler not to include the system malloc implementation.
+      Fixes bug 20424; bugfix on 0.2.0.20-rc.
+    - Don't try to use a pragma to temporarily disable the
+      -Wunused-const-variable warning if the compiler doesn't support
+      it. Fixes bug 26785; bugfix on 0.3.2.11.
+    - When building Tor, prefer to use Python 3 over Python 2, and more
+      recent (contemplated) versions over older ones. Closes
+      ticket 26372.
+
+  o Minor features (compression, zstd):
+    - When running with zstd, Tor now considers using advanced functions
+      that the zstd maintainers have labeled as potentially unstable. To
+      prevent breakage, Tor will only use this functionality when the
+      runtime version of the zstd library matches the version with which
+      Tor was compiled. Closes ticket 25162.
+
+  o Minor features (configuration):
+    - The "DownloadSchedule" options have been renamed to end with
+      "DownloadInitialDelay". The old names are still allowed, but will
+      produce a warning. Comma-separated lists are still permitted for
+      these options, but all values after the first are ignored (as they
+      have been since 0.2.9). Closes ticket 23354.
+
+  o Minor features (continuous integration):
+    - Log the compiler path and version during Appveyor builds.
+      Implements ticket 27449.
+    - Show config.log and test-suite.log after failed Appveyor builds.
+      Also upload the zipped full logs as a build artifact. Implements
+      ticket 27430.
+    - Backport Travis rust distcheck to 0.3.3. Closes ticket 24629.
+    - Enable macOS builds in our Travis CI configuration. Closes
+      ticket 24629.
+    - Install libcap-dev and libseccomp2-dev so these optional
+      dependencies get tested on Travis CI. Closes ticket 26560.
+    - Only post Appveyor IRC notifications when the build fails.
+      Implements ticket 27275.
+    - Run asciidoc during Travis CI. Implements ticket 27087.
+    - Use ccache in our Travis CI configuration. Closes ticket 26952.
+    - Add the necessary configuration files for continuous integration
+      testing on Windows, via the Appveyor platform. Closes ticket
+      25549. Patches from Marcin Cieślak and Isis Lovecruft.
+
+  o Minor features (continuous integration, rust):
+    - Use cargo cache in our Travis CI configuration. Closes
+      ticket 26952.
+
+  o Minor features (control port):
+    - Introduce GETINFO "current-time/{local,utc}" to return the local
+      and UTC times respectively in ISO format. This helps a controller
+      like Tor Browser detect a time-related error. Closes ticket 25511.
+      Patch by Neel Chauhan.
+    - Introduce new fields to the CIRC_BW event. There are two new
+      fields in each of the read and written directions. The DELIVERED
+      fields report the total valid data on the circuit, as measured by
+      the payload sizes of verified and error-checked relay command
+      cells. The OVERHEAD fields report the total unused bytes in each
+      of these cells. Closes ticket 25903.
+
+  o Minor features (controller):
+    - The control port now exposes the list of HTTPTunnelPorts and
+      ExtOrPorts via GETINFO net/listeners/httptunnel and
+      net/listeners/extor respectively. Closes ticket 26647.
+
+  o Minor features (directory authorities):
+    - Stop warning about incomplete bw lines before the first complete
+      bw line has been found, so that additional header lines can be
+      ignored. Fixes bug 25960; bugfix on 0.2.2.1-alpha
+    - Authorities no longer vote to make the subprotocol version
+      "LinkAuth=1" a requirement: it is unsupportable with NSS, and
+      hasn't been needed since Tor 0.3.0.1-alpha. Closes ticket 27286.
+
+  o Minor features (directory authority):
+    - Directory authorities now open their key-pinning files as O_SYNC,
+      to limit their chances of accidentally writing partial lines.
+      Closes ticket 23909.
+
+  o Minor features (directory authority, forward compatibility):
+    - Make the lines of the measured bandwidth file able to contain
+      their entries in any order. Previously, the node_id entry needed
+      to come first. Closes ticket 26004.
+
+  o Minor features (entry guards):
+    - Introduce a new torrc option NumPrimaryGuards for controlling the
+      number of primary guards. Closes ticket 25843.
+
+  o Minor features (geoip):
+    - Update geoip and geoip6 to the August 7 2018 Maxmind GeoLite2
+      Country database. Closes ticket 27089.
+
+  o Minor features (performance):
+    - Avoid a needless call to malloc() when processing an incoming
+      relay cell. Closes ticket 24914.
+    - Make our timing-wheel code run a tiny bit faster on 32-bit
+      platforms, by preferring 32-bit math to 64-bit. Closes
+      ticket 24688.
+    - Avoid a needless malloc()/free() pair every time we handle an ntor
+      handshake. Closes ticket 25150.
+
+  o Minor features (Rust, portability):
+    - Rust cross-compilation is now supported. Closes ticket 25895.
+
+  o Minor features (testing):
+    - Add a unit test for voting_schedule_get_start_of_next_interval().
+      Closes ticket 26014, and helps make unit test coverage
+      more deterministic.
+    - A new unittests module specifically for testing the functions in
+      the (new-ish) bridges.c module has been created with new
+      unittests, raising the code coverage percentages. Closes 25425.
+    - We now have improved testing for addressmap_get_virtual_address()
+      function. This should improve our test coverage, and make our test
+      coverage more deterministic. Closes ticket 25993.
+
+  o Minor features (timekeeping, circuit scheduling):
+    - When keeping track of how busy each circuit have been recently on
+      a given connection, use coarse-grained monotonic timers rather
+      than gettimeofday(). This change should marginally increase
+      accuracy and performance. Implements part of ticket 25927.
+
+  o Minor features (unit tests):
+    - Test complete bandwidth measurements files, and test that
+      incomplete bandwidth lines only give warnings when the end of the
+      header has not been detected. Fixes bug 25947; bugfix
+      on 0.2.2.1-alpha
+
+  o Minor bugfixes (bandwidth management):
+    - Consider ourselves "low on write bandwidth" if we have exhausted
+      our write bandwidth some time in the last second. This was the
+      documented behavior before, but the actual behavior was to change
+      this value every TokenBucketRefillInterval. Fixes bug 25828;
+      bugfix on 0.2.3.5-alpha.
+
+  o Minor bugfixes (C correctness):
+    - Add a missing lock acquisition in the shutdown code of the control
+      subsystem. Fixes bug 25675; bugfix on 0.2.7.3-rc. Found by
+      Coverity; this is CID 1433643.
+
+  o Minor bugfixes (code style):
+    - Fixed multiple includes of transports.h in src/or/connection.c
+      Fixes bug 25261; bugfix on 0.2.5.1-alpha.
+    - Remove the unused variable n_possible from the function
+      channel_get_for_extend(). Fixes bug 25645; bugfix on 0.2.4.4-alpha
+
+  o Minor bugfixes (compilation):
+    - Silence a spurious compiler warning on the GetAdaptersAddresses
+      function pointer cast. This issue is already fixed by 26481 in
+      0.3.5 and later, by removing the lookup and cast. Fixes bug 27465;
+      bugfix on 0.2.3.11-alpha.
+    - Stop calling SetProcessDEPPolicy() on 64-bit Windows. It is not
+      supported, and always fails. Some compilers warn about the
+      function pointer cast on 64-bit Windows. Fixes bug 27461; bugfix
+      on 0.2.2.23-alpha.
+    - Fix a compilation warning on some versions of GCC when building
+      code that calls routerinfo_get_my_routerinfo() twice, assuming
+      that the second call will succeed if the first one did. Fixes bug
+      26269; bugfix on 0.2.8.2-alpha.
+    - Refrain from compiling unit testing related object files when
+      --disable-unittests is set to configure script. Fixes bug 24891;
+      bugfix on 0.2.5.1-alpha.
+    - The --enable-fatal-warnings flag now affects Rust code as well.
+      Closes ticket 26245.
+    - Avoid a compiler warning when casting the return value of
+      smartlist_len() to double with DEBUG_SMARTLIST enabled. Fixes bug
+      26283; bugfix on 0.2.4.10-alpha.
+
+  o Minor bugfixes (compilation, windows):
+    - Don't link or search for pthreads when building for Windows, even
+      if we are using build environment (like mingw) that provides a
+      pthreads library. Fixes bug 27081; bugfix on 0.1.0.1-rc.
+
+  o Minor bugfixes (continuous integration):
+    - Build with zstd on macOS. Fixes bug 27090; bugfix on 0.3.1.5-alpha.
+    - Skip a pair of unreliable key generation tests on Windows, until
+      the underlying issue in bug 26076 is resolved. Fixes bug 26830 and
+      bug 26853; bugfix on 0.2.7.3-rc and 0.3.2.1-alpha respectively.
+
+  o Minor bugfixes (control port):
+    - Respond with more human-readable error messages to GETINFO exit-
+      policy/* requests. Also, let controller know if an error is
+      transient (response code 551) or not (response code 552). Fixes
+      bug 25852; bugfix on 0.2.8.1-alpha.
+    - Parse the "HSADDRESS=" parameter in HSPOST commands properly.
+      Previously, it was misparsed and ignored. Fixes bug 26523; bugfix
+      on 0.3.3.1-alpha. Patch by "akwizgran".
+    - Make CIRC_BW event reflect the total of all data sent on a
+      circuit, including padding and dropped cells. Also fix a mis-
+      counting bug when STREAM_BW events were enabled. Fixes bug 25400;
+      bugfix on 0.2.5.2-alpha.
+
+  o Minor bugfixes (correctness, flow control):
+    - Upon receiving a stream-level SENDME cell, verify that our window
+      has not grown too large. Fixes bug 26214; bugfix on svn
+      r54 (pre-0.0.1)
+
+  o Minor bugfixes (directory authority):
+    - When voting for recommended versions, make sure that all of the
+      versions are well-formed and parsable. Fixes bug 26485; bugfix
+      on 0.1.1.6-alpha.
+
+  o Minor bugfixes (directory client):
+    - When unverified-consensus is verified, rename it to cached-
+      consenus. Fixes bug 4187; bugfix on 0.2.0.3-alpha.
+    - Fixed launching a certificate fetch always during the scheduled
+      periodic consensus fetch by fetching only in those cases when
+      consensus are waiting for certs. Fixes bug 24740; bugfix
+      on 0.2.9.1-alpha.
+
+  o Minor bugfixes (error reporting):
+    - Improve tolerance for directory authorities with skewed clocks.
+      Previously, an authority with a clock more than 60 seconds ahead
+      could cause a client with a correct clock to warn that the
+      client's clock was behind. Now the clocks of a majority of
+      directory authorities have to be ahead of the client before this
+      warning will occur. Fixes bug 25756; bugfix on 0.2.2.25-alpha.
+
+  o Minor bugfixes (in-process restart):
+    - Always call tor_free_all() when leaving tor_run_main(). When we
+      did not, restarting tor in-process would cause an assertion
+      failure. Fixes bug 26948; bugfix on 0.3.3.1-alpha.
+
+  o Minor bugfixes (Linux seccomp2 sandbox):
+    - Fix a bug in our sandboxing rules for the openat() syscall.
+      Previously, no openat() call would be permitted, which would break
+      filesystem operations on recent glibc versions. Fixes bug 25440;
+      bugfix on 0.2.9.15. Diagnosis and patch from Daniel Pinto.
+
+  o Minor bugfixes (logging):
+    - Improve the log message when connection initiators fail to
+      authenticate direct connections to relays. Fixes bug 26927; bugfix
+      on 0.3.0.1-alpha.
+
+  o Minor bugfixes (onion services):
+    - Silence a spurious compiler warning in
+      rend_client_send_introduction(). Fixes bug 27463; bugfix
+      on 0.1.1.2-alpha.
+    - Fix bug that causes services to not ever rotate their descriptors
+      if they were getting SIGHUPed often. Fixes bug 26932; bugfix
+      on 0.3.2.1-alpha.
+    - Recompute some consensus information after detecting a clock jump,
+      or after transitioning from a non-live consensus to a live
+      consensus. We do this to avoid having an outdated state, and
+      miscalculating the index for next-generation onion services. Fixes
+      bug 24977; bugfix on 0.3.2.1-alpha.
+
+  o Minor bugfixes (portability):
+    - Fix compilation of the unit tests on GNU/Hurd, which does not
+      define PATH_MAX. Fixes bug 26873; bugfix on 0.3.3.1-alpha. Patch
+      from "paulusASol".
+    - Work around two different bugs in the OS X 10.10 and later SDKs
+      that would prevent us from successfully targeting earlier versions
+      of OS X. Fixes bug 26876; bugfix on 0.3.3.1-alpha.
+    - Do not align mmap length, as it is not required by POSIX, and the
+      getpagesize function is deprecated. Fixes bug 25399; bugfix
+      on 0.1.1.23.
+
+  o Minor bugfixes (portability, FreeBSD):
+    - In have_enough_mem_for_dircache(), the variable DIRCACHE_MIN_MEM_MB
+      does not stringify on FreeBSD, so we switch to tor_asprintf().
+      Fixes bug 20887; bugfix on 0.2.8.1-alpha. Patch by Neel Chauhan.
+
+  o Minor bugfixes (relay statistics):
+    - When a relay is collecting internal statistics about how many
+      create cell requests it has seen of each type, accurately count
+      the requests from relays that temporarily fall out of the
+      consensus. (To be extra conservative, we were already ignoring
+      requests from clients in our counts, and we continue ignoring them
+      here.) Fixes bug 24910; bugfix on 0.2.4.17-rc.
+
+  o Minor bugfixes (rust):
+    - Backport test_rust.sh from master. Fixes bug 26497; bugfix
+      on 0.3.1.5-alpha.
+    - Protover parsing was accepting the presence of whitespace in
+      version strings, which the C implementation would choke on, e.g.
+      "Desc=1\t,2". Fixes bug 27177; bugfix on 0.3.3.5-rc.
+    - Protover parsing was ignoring a 2nd hyphen and everything after
+      it, accepting entries like "Link=1-5-foo". Fixes bug 27164; bugfix
+      on 0.3.3.1-alpha.
+    - Stop setting $CARGO_HOME. cargo will use the user's $CARGO_HOME, or
+      $HOME/.cargo by default. Fixes bug 26497; bugfix on 0.3.1.5-alpha.
+    - cd to ${abs_top_builddir}/src/rust before running cargo in
+      src/test/test_rust.sh. This makes the working directory consistent
+      between builds and tests. Fixes bug 26497; bugfix on 0.3.3.2-alpha.
+
+  o Minor bugfixes (single onion services, Tor2web):
+    - Log a protocol warning when single onion services or Tor2web
+      clients fail to authenticate direct connections to relays. Fixes
+      bug 26924; bugfix on 0.2.9.1-alpha.
+
+  o Minor bugfixes (test coverage tools):
+    - Update our "cov-diff" script to handle output from the latest
+      version of gcov, and to remove extraneous timestamp information
+      from its output. Fixes bugs 26101 and 26102; bugfix
+      on 0.2.5.1-alpha.
+
+  o Minor bugfixes (testing):
+    - Disable core dumps in test_bt.sh, to avoid failures in "make
+      distcheck". Fixes bug 26787; bugfix on 0.2.5.2-alpha.
+    - When testing workqueue event-cancellation, make sure that we
+      actually cancel an event, and that cancel each event with equal
+      probability. (It was previously possible, though extremely
+      unlikely, for our event-canceling test not to cancel any events.)
+      Fixes bug 26008; bugfix on 0.2.6.3-alpha.
+    - Repeat part of the test in test_client_pick_intro() a number of
+      times, to give it consistent coverage. Fixes bug 25996; bugfix
+      on 0.3.2.1-alpha.
+    - Remove randomness from the hs_common/responsible_hsdirs test, so
+      that it always takes the same path through the function it tests.
+      Fixes bug 25997; bugfix on 0.3.2.1-alpha.
+    - Change the behavior of the "channel/outbound" test so that it
+      never causes a 10-second rollover for the EWMA circuitmux code.
+      Previously, this behavior would happen randomly, and result in
+      fluctuating test coverage. Fixes bug 25994; bugfix
+      on 0.3.3.1-alpha.
+    - Use X509_new() to allocate certificates that will be freed later
+      with X509_free(). Previously, some parts of the unit tests had
+      used tor_malloc_zero(), which is incorrect, and which caused test
+      failures on Windows when they were built with extra hardening.
+      Fixes bugs 25943 and 25944; bugfix on 0.2.8.1-alpha. Patch by
+      Marcin Cieślak.
+    - While running the circuit_timeout test, fix the PRNG to a
+      deterministic AES stream, so that the test coverage from this test
+      will itself be deterministic. Fixes bug 25995; bugfix
+      on 0.2.2.2-alpha.
+
+  o Minor bugfixes (testing, bootstrap):
+    - When calculating bootstrap progress, check exit policies and the
+      exit flag. Previously, Tor would only check the exit flag, which
+      caused race conditions in small and fast networks like chutney.
+      Fixes bug 27236; bugfix on 0.2.6.3-alpha.
+
+  o Minor bugfixes (testing, chutney):
+    - When running make test-network-all, use the mixed+hs-v2 network.
+      (A previous fix to chutney removed v3 onion services from the
+      mixed+hs-v23 network, so seeing "mixed+hs-v23" in tests is
+      confusing.) Fixes bug 27345; bugfix on 0.3.2.1-alpha.
+    - Before running make test-network-all, delete old logs and test
+      result files, to avoid spurious failures. Fixes bug 27295; bugfix
+      on 0.2.7.3-rc.
+
+  o Minor bugfixes (testing, openssl compatibility):
+    - Our "tortls/cert_matches_key" unit test no longer relies on
+      OpenSSL internals. Previously, it relied on unsupported OpenSSL
+      behavior in a way that caused it to crash with OpenSSL 1.0.2p.
+      Fixes bug 27226; bugfix on 0.2.5.1-alpha.
+
+  o Minor bugfixes (v3 onion services):
+    - Stop sending ed25519 link specifiers in v3 onion service introduce
+      cells and descriptors, when the rendezvous or introduction point
+      doesn't support ed25519 link authentication. Fixes bug 26627;
+      bugfix on 0.3.2.4-alpha.
+
+  o Minor bugfixes (vanguards):
+    - Allow the last hop in a vanguard circuit to be the same as our
+      first, to prevent the adversary from influencing guard node choice
+      by choice of last hop. Also prevent the creation of A - B - A
+      paths, or A - A paths, which are forbidden by relays. Fixes bug
+      25870; bugfix on 0.3.3.1-alpha.
+
+  o Minor bugfixes (Windows, compilation):
+    - Silence a compilation warning on MSVC 2017 and clang-cl. Fixes bug
+      27185; bugfix on 0.2.2.2-alpha.
+
+  o Code simplification and refactoring:
+    - Remove duplicate code in parse_{c,s}method_line and bootstrap
+      their functionalities into a single function. Fixes bug 6236;
+      bugfix on 0.2.3.6-alpha.
+    - We remove the PortForwsrding and PortForwardingHelper options,
+      related functions, and the port_forwarding tests. These options
+      were used by the now-deprecated Vidalia to help ordinary users
+      become Tor relays or bridges. Closes ticket 25409. Patch by
+      Neel Chauhan.
+    - In order to make the OR and dir checking function in router.c less
+      confusing we renamed some functions and
+      consider_testing_reachability() has been split into
+      router_should_check_reachability() and
+      router_do_reachability_checks(). Also we improved the documentation
+      in some functions. Closes ticket 18918.
+    - Initial work to isolate Libevent usage to a handful of modules in
+      our codebase, to simplify our call structure, and so that we can
+      more easily change event loops in the future if needed. Closes
+      ticket 23750.
+    - Introduce a function to call getsockname() and return tor_addr_t,
+      to save a little complexity throughout the codebase. Closes
+      ticket 18105.
+    - Make hsdir_index in node_t a hsdir_index_t rather than a pointer
+      as hsdir_index is always present. Also, we move hsdir_index_t into
+      or.h. Closes ticket 23094. Patch by Neel Chauhan.
+    - Merge functions used for describing nodes and suppress the
+      functions that do not allocate memory for the output buffer
+      string. NODE_DESC_BUF_LEN constant and format_node_description()
+      function cannot be used externally from router.c module anymore.
+      Closes ticket 25432. Patch by valentecaio.
+    - Our main loop has been simplified so that all important operations
+      happen inside events. Previously, some operations had to happen
+      outside the event loop, to prevent infinite sequences of event
+      activations. Closes ticket 25374.
+    - Put a SHA1 public key digest in hs_service_intro_point_t, and use
+      it in register_intro_circ() and service_intro_point_new(). This
+      prevents the digest from being re-calculated each time. Closes
+      ticket 23107. Patch by Neel Chauhan.
+    - Refactor token-bucket implementations to use a common backend.
+      Closes ticket 25766.
+    - Remove extern declaration of stats_n_seconds_working variable from
+      main, protecting its accesses with get_uptime() and reset_uptime()
+      functions. Closes ticket 25081, patch by “valentecaio”.
+    - Remove our previous logic for "cached gettimeofday()" -- our
+      coarse monotonic timers are fast enough for this purpose, and far
+      less error-prone. Implements part of ticket 25927.
+    - Remove the return value for fascist_firewall_choose_address_base(),
+      and sister functions such as fascist_firewall_choose_address_node()
+      and fascist_firewall_choose_address_rs(). Also, while we're here,
+      initialize the ap argument as leaving it uninitialized can pose a
+      security hazard. Closes ticket 24734. Patch by Neel Chauhan.
+    - Rename two fields of connection_t struct. timestamp_lastwritten is
+      renamed to timestamp_last_write_allowed and timestamp_lastread is
+      renamed to timestamp_last_read_allowed. Closes ticket 24714, patch
+      by "valentecaio".
+    - Since Tor requires C99, remove our old workaround code for libc
+      implementations where free(NULL) doesn't work. Closes ticket 24484.
+    - Use our standard rate-limiting code to deal with excessive
+      libevent failures, rather than the hand-rolled logic we had
+      before. Closes ticket 26016.
+    - We remove the return value of node_get_prim_orport() and
+      node_get_prim_dirport(), and introduce node_get_prim_orport() in
+      node_ipv6_or_preferred() and node_ipv6_dir_preferred() in order to
+      check for a null address. Closes ticket 23873. Patch by
+      Neel Chauhan.
+    - We switch to should_record_bridge_info() in
+      geoip_note_client_seen() and options_need_geoip_info() instead of
+      accessing the configuration values directly. Fixes bug 25290;
+      bugfix on 0.2.1.6-alpha. Patch by Neel Chauhan.
+
+  o Deprecated features:
+    - As we are not recommending 0.2.5 anymore, we require relays that
+      once had an ed25519 key associated with their RSA key to always
+      have that key, instead of allowing them to drop back to a version
+      that didn't support ed25519. This means they need to use a new RSA
+      key if the want to downgrade to an older version of tor without
+      ed25519. Closes ticket 20522.
+
+  o Removed features:
+    - Directory authorities will no longer support voting according to
+      any consensus method before consensus method 25. This keeps
+      authorities compatible with all authorities running 0.2.9.8 and
+      later, and does not break any clients or relays. Implements ticket
+      24378 and proposal 290.
+    - The PortForwarding and PortForwardingHelper features have been
+      removed. The reasoning is, given that implementations of NAT
+      traversal protocols within common consumer grade routers are
+      frequently buggy, and that the target audience for a NAT punching
+      feature is a perhaps less-technically-inclined relay operator,
+      when the helper fails to setup traversal the problems are usually
+      deep, ugly, and very router specific, making them horrendously
+      impossible for technical support to reliable assist with, and thus
+      resulting in frustration all around. Unfortunately, relay
+      operators who would like to run relays behind NATs will need to
+      become more familiar with the port forwarding configurations on
+      their local router. Closes 25409.
+    - The TestingEnableTbEmptyEvent option has been removed. It was used
+      in testing simulations to measure how often connection buckets
+      were emptied, in order to improve our scheduling, but it has not
+      been actively used in years. Closes ticket 25760.
+    - The old "round-robin" circuit multiplexer (circuitmux)
+      implementation has been removed, along with a fairly large set of
+      code that existed to support it. It has not been the default
+      circuitmux since we introduced the "EWMA" circuitmux in 0.2.4.x,
+      but it still required an unreasonable amount of memory and CPU.
+      Closes ticket 25268.
+
+
 Changes in version 0.3.3.9 - 2018-07-13
   Tor 0.3.3.9 moves to a new bridge authority, meaning people running
   bridge relays should upgrade.
@@ -886,7 +1441,7 @@ Changes in version 0.3.3.6 - 2018-05-22
       hop. Fixes bug 23100; bugfix on 0.2.2.2-alpha.
 
   o Minor bugfixes (relay, crash, backport from 0.3.4.1-alpha):
-    - Avoid a crash when running with DirPort set but ORPort tuned off.
+    - Avoid a crash when running with DirPort set but ORPort turned off.
       Fixes a case of bug 23693; bugfix on 0.3.1.1-alpha.
 
   o Minor bugfixes (Rust FFI):
@@ -894,7 +1449,7 @@ Changes in version 0.3.3.6 - 2018-05-22
       would call the Rust implementation of
       protover_get_supported_protocols(). This was due to the C version
       returning a static string, whereas the Rust version newly allocated
-      a CString to pass accross the FFI boundary. Consequently, the C
+      a CString to pass across the FFI boundary. Consequently, the C
       code was not expecting to need to free() what it was given. Fixes
       bug 25127; bugfix on 0.3.2.1-alpha.
 
diff -pruN 0.3.3.9-1/src/common/address.c 0.3.4.8-1/src/common/address.c
--- 0.3.3.9-1/src/common/address.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/address.c	2018-09-07 12:42:19.000000000 +0000
@@ -1496,7 +1496,10 @@ get_interface_addresses_win32(int severi
     goto done;
   }
 
-  if (!(fn = (GetAdaptersAddresses_fn_t)
+  /* Cast through a void function pointer, to silence a spurious compiler
+   * warning on 64-bit Windows. This cast is safe, because we are casting to
+   * the correct type for GetAdaptersAddresses(). */
+  if (!(fn = (GetAdaptersAddresses_fn_t)(void(*)(void))
                   GetProcAddress(lib, "GetAdaptersAddresses"))) {
     log_fn(severity, LD_NET, "Unable to obtain pointer to "
            "GetAdaptersAddresses");
@@ -1697,7 +1700,7 @@ get_interface_address6_via_udp_socket_ha
                                             sa_family_t family,
                                             tor_addr_t *addr))
 {
-  struct sockaddr_storage my_addr, target_addr;
+  struct sockaddr_storage target_addr;
   int sock=-1, r=-1;
   socklen_t addr_len;
 
@@ -1740,21 +1743,19 @@ get_interface_address6_via_udp_socket_ha
     goto err;
   }
 
-  if (tor_getsockname(sock,(struct sockaddr*)&my_addr, &addr_len)) {
+  if (tor_addr_from_getsockname(addr, sock) < 0) {
     int e = tor_socket_errno(sock);
     log_fn(severity, LD_NET, "getsockname() to determine interface failed: %s",
            tor_socket_strerror(e));
     goto err;
   }
 
- if (tor_addr_from_sockaddr(addr, (struct sockaddr*)&my_addr, NULL) == 0) {
-    if (tor_addr_is_loopback(addr) || tor_addr_is_multicast(addr)) {
-      log_fn(severity, LD_NET, "Address that we determined via UDP socket"
-                               " magic is unsuitable for public comms.");
-    } else {
-      r=0;
-    }
- }
+  if (tor_addr_is_loopback(addr) || tor_addr_is_multicast(addr)) {
+    log_fn(severity, LD_NET, "Address that we determined via UDP socket"
+           " magic is unsuitable for public comms.");
+  } else {
+    r=0;
+  }
 
  err:
   if (sock >= 0)
diff -pruN 0.3.3.9-1/src/common/address_set.c 0.3.4.8-1/src/common/address_set.c
--- 0.3.3.9-1/src/common/address_set.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/address_set.c	2018-06-15 21:20:53.000000000 +0000
@@ -15,7 +15,7 @@
 #include "address.h"
 #include "compat.h"
 #include "container.h"
-#include "crypto.h"
+#include "crypto_rand.h"
 #include "util.h"
 #include "siphash.h"
 
diff -pruN 0.3.3.9-1/src/common/aes.c 0.3.4.8-1/src/common/aes.c
--- 0.3.3.9-1/src/common/aes.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/aes.c	2018-06-15 21:20:53.000000000 +0000
@@ -16,8 +16,8 @@
   #include <ws2tcpip.h>
 #endif
 
+#include "compat_openssl.h"
 #include <openssl/opensslv.h>
-#include "crypto.h"
 #include "crypto_openssl_mgt.h"
 
 #if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(1,0,0)
@@ -116,7 +116,11 @@ aes_cipher_free_(aes_cnt_cipher_t *ciphe
   if (!cipher_)
     return;
   EVP_CIPHER_CTX *cipher = (EVP_CIPHER_CTX *) cipher_;
+#ifdef OPENSSL_1_1_API
+  EVP_CIPHER_CTX_reset(cipher);
+#else
   EVP_CIPHER_CTX_cleanup(cipher);
+#endif
   EVP_CIPHER_CTX_free(cipher);
 }
 void
diff -pruN 0.3.3.9-1/src/common/buffers.h 0.3.4.8-1/src/common/buffers.h
--- 0.3.3.9-1/src/common/buffers.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/buffers.h	2018-06-15 21:20:53.000000000 +0000
@@ -13,7 +13,6 @@
 #define TOR_BUFFERS_H
 
 #include "compat.h"
-#include "compat.h"
 #include "torint.h"
 #include "testsupport.h"
 
diff -pruN 0.3.3.9-1/src/common/compat.c 0.3.4.8-1/src/common/compat.c
--- 0.3.3.9-1/src/common/compat.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat.c	2018-06-15 21:20:53.000000000 +0000
@@ -100,7 +100,6 @@ SecureZeroMemory(PVOID ptr, SIZE_T cnt)
 /* Only use the linux prctl;  the IRIX prctl is totally different */
 #include <sys/prctl.h>
 #elif defined(__APPLE__)
-#include <sys/types.h>
 #include <sys/ptrace.h>
 #endif /* defined(HAVE_SYS_PRCTL_H) && defined(__linux__) || ... */
 
@@ -116,7 +115,7 @@ SecureZeroMemory(PVOID ptr, SIZE_T cnt)
 #ifdef HAVE_SIGNAL_H
 #include <signal.h>
 #endif
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
 #include <sys/mman.h>
 #endif
 #ifdef HAVE_SYS_SYSLIMITS_H
@@ -204,25 +203,17 @@ tor_rename(const char *path_old, const c
                 sandbox_intern_string(path_new));
 }
 
-/* Some MinGW builds have sys/mman.h, but not the corresponding symbols.
- * Other configs rename the symbols using macros (including getpagesize).
- * So check for sys/mman.h and unistd.h, and a getpagesize declaration. */
-#if (defined(HAVE_SYS_MMAN_H) && defined(HAVE_UNISTD_H) && \
-     defined(HAVE_DECL_GETPAGESIZE))
-#define COMPAT_HAS_MMAN_AND_PAGESIZE
-#endif
-
-#if defined(COMPAT_HAS_MMAN_AND_PAGESIZE) || \
-  defined(RUNNING_DOXYGEN)
+#if defined(HAVE_MMAP) || defined(RUNNING_DOXYGEN)
 /** Try to create a memory mapping for <b>filename</b> and return it.  On
- * failure, return NULL.  Sets errno properly, using ERANGE to mean
- * "empty file". */
+ * failure, return NULL. Sets errno properly, using ERANGE to mean
+ * "empty file". Must only be called on trusted Tor-owned files, as changing
+ * the underlying file's size causes unspecified behavior. */
 tor_mmap_t *
 tor_mmap_file(const char *filename)
 {
   int fd; /* router file */
   char *string;
-  int page_size, result;
+  int result;
   tor_mmap_t *res;
   size_t size, filesize;
   struct stat st;
@@ -251,13 +242,6 @@ tor_mmap_file(const char *filename)
     return NULL;
   }
   size = filesize = (size_t)(st.st_size);
-  /*
-   * Should we check for weird crap like mmapping a named pipe here,
-   * or just wait for if (!size) below to fail?
-   */
-  /* ensure page alignment */
-  page_size = getpagesize();
-  size += (size%page_size) ? page_size-(size%page_size) : 0;
 
   if (st.st_size > SSIZE_T_CEILING || (off_t)size < st.st_size) {
     log_warn(LD_FS, "File \"%s\" is too large. Ignoring.",filename);
@@ -418,40 +402,8 @@ tor_munmap_file(tor_mmap_t *handle)
   return 0;
 }
 #else
-tor_mmap_t *
-tor_mmap_file(const char *filename)
-{
-  struct stat st;
-  char *res = read_file_to_str(filename, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
-  tor_mmap_t *handle;
-  if (! res)
-    return NULL;
-  handle = tor_malloc_zero(sizeof(tor_mmap_t));
-  handle->data = res;
-  handle->size = st.st_size;
-  return handle;
-}
-
-/** Unmap the file mapped with tor_mmap_file(), and return 0 for success
- * or -1 for failure.
- */
-
-int
-tor_munmap_file(tor_mmap_t *handle)
-{
-  char *d = NULL;
-  if (handle == NULL)
-    return 0;
-
-  d = (char*)handle->data;
-  tor_free(d);
-  memwipe(handle, 0, sizeof(tor_mmap_t));
-  tor_free(handle);
-
-  /* Can't fail in this mmap()/munmap()-free case */
-  return 0;
-}
-#endif /* defined(COMPAT_HAS_MMAN_AND_PAGESIZE) || ... || ... */
+#error "cannot implement tor_mmap_file"
+#endif /* defined(HAVE_MMAP) || ... || ... */
 
 /** Replacement for snprintf.  Differs from platform snprintf in two
  * ways: First, always NUL-terminates its output.  Second, always
@@ -1392,6 +1344,24 @@ tor_getsockname,(tor_socket_t sock, stru
    return getsockname(sock, address, address_len);
 }
 
+/**
+ * Find the local address associated with the socket <b>sock</b>, and
+ * place it in *<b>addr_out</b>.  Return 0 on success, -1 on failure.
+ *
+ * (As tor_getsockname, but instead places the result in a tor_addr_t.) */
+int
+tor_addr_from_getsockname(tor_addr_t *addr_out, tor_socket_t sock)
+{
+  struct sockaddr_storage ss;
+  socklen_t ss_len = sizeof(ss);
+  memset(&ss, 0, sizeof(ss));
+
+  if (tor_getsockname(sock, (struct sockaddr *) &ss, &ss_len) < 0)
+    return -1;
+
+  return tor_addr_from_sockaddr(addr_out, (struct sockaddr *)&ss, NULL);
+}
+
 /** Turn <b>socket</b> into a nonblocking socket. Return 0 on success, -1
  * on failure.
  */
diff -pruN 0.3.3.9-1/src/common/compat.h 0.3.4.8-1/src/common/compat.h
--- 0.3.3.9-1/src/common/compat.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat.h	2018-06-15 21:20:53.000000000 +0000
@@ -318,12 +318,12 @@ typedef struct tor_mmap_t {
   size_t size; /**< Size of the file. */
 
   /* None of the fields below should be accessed from outside compat.c */
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
   size_t mapping_size; /**< Size of the actual mapping. (This is this file
                         * size, rounded up to the nearest page.) */
 #elif defined _WIN32
   HANDLE mmap_handle;
-#endif /* defined(HAVE_SYS_MMAN_H) || ... */
+#endif /* defined(HAVE_MMAP) || ... */
 
 } tor_mmap_t;
 
@@ -510,6 +510,8 @@ int get_n_open_sockets(void);
 MOCK_DECL(int,
 tor_getsockname,(tor_socket_t socket, struct sockaddr *address,
                  socklen_t *address_len));
+struct tor_addr_t;
+int tor_addr_from_getsockname(struct tor_addr_t *addr_out, tor_socket_t sock);
 
 #define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags)
 #define tor_socket_recv(s, buf, len, flags) recv(s, buf, len, flags)
diff -pruN 0.3.3.9-1/src/common/compat_libevent.c 0.3.4.8-1/src/common/compat_libevent.c
--- 0.3.3.9-1/src/common/compat_libevent.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_libevent.c	2018-06-15 21:20:53.000000000 +0000
@@ -11,7 +11,7 @@
 #define COMPAT_LIBEVENT_PRIVATE
 #include "compat_libevent.h"
 
-#include "crypto.h"
+#include "crypto_rand.h"
 
 #include "util.h"
 #include "torlog.h"
@@ -79,6 +79,43 @@ tor_event_free_(struct event *ev)
 /** Global event base for use by the main thread. */
 static struct event_base *the_event_base = NULL;
 
+/**
+ * @defgroup postloop post-loop event helpers
+ *
+ * If we're not careful, Libevent can susceptible to infinite event chains:
+ * one event can activate another, whose callback activates another, whose
+ * callback activates another, ad infinitum.  While this is happening,
+ * Libevent won't be checking timeouts, socket-based events, signals, and so
+ * on.
+ *
+ * We solve this problem by marking some events as "post-loop".  A post-loop
+ * event behaves like any ordinary event, but any events that _it_ activates
+ * cannot run until Libevent has checked for other events at least once.
+ *
+ * @{ */
+
+/**
+ * An event that stops Libevent from running any more events on the current
+ * iteration of its loop, until it has re-checked for socket events, signal
+ * events, timeouts, etc.
+ */
+static struct event *rescan_mainloop_ev = NULL;
+
+/**
+ * Callback to implement rescan_mainloop_ev: it simply exits the mainloop,
+ * and relies on Tor to re-enter the mainloop since no error has occurred.
+ */
+static void
+rescan_mainloop_cb(evutil_socket_t fd, short events, void *arg)
+{
+  (void)fd;
+  (void)events;
+  struct event_base *the_base = arg;
+  event_base_loopbreak(the_base);
+}
+
+/** @} */
+
 /* This is what passes for version detection on OSX.  We set
  * MACOSX_KQUEUE_IS_BROKEN to true iff we're on a version of OSX before
  * 10.4.0 (aka 1040). */
@@ -130,6 +167,15 @@ tor_libevent_initialize(tor_libevent_cfg
     /* LCOV_EXCL_STOP */
   }
 
+  rescan_mainloop_ev = event_new(the_event_base, -1, 0,
+                                 rescan_mainloop_cb, the_event_base);
+  if (!rescan_mainloop_ev) {
+    /* LCOV_EXCL_START */
+    log_err(LD_GENERAL, "Unable to create rescan event: cannot continue.");
+    exit(1); // exit ok: libevent is broken.
+    /* LCOV_EXCL_STOP */
+  }
+
   log_info(LD_GENERAL,
       "Initialized libevent version %s using method %s. Good.",
       event_get_version(), tor_libevent_get_method());
@@ -207,10 +253,39 @@ periodic_timer_new(struct event_base *ba
   }
   timer->cb = cb;
   timer->data = data;
-  event_add(timer->ev, (struct timeval *)tv); /*drop const for old libevent*/
+  periodic_timer_launch(timer, tv);
   return timer;
 }
 
+/**
+ * Launch the timer <b>timer</b> to run at <b>tv</b> from now, and every
+ * <b>tv</b> thereafter.
+ *
+ * If the timer is already enabled, this function does nothing.
+ */
+void
+periodic_timer_launch(periodic_timer_t *timer, const struct timeval *tv)
+{
+  tor_assert(timer);
+  if (event_pending(timer->ev, EV_TIMEOUT, NULL))
+    return;
+  event_add(timer->ev, tv);
+}
+
+/**
+ * Disable the provided <b>timer</b>, but do not free it.
+ *
+ * You can reenable the same timer later with periodic_timer_launch.
+ *
+ * If the timer is already disabled, this function does nothing.
+ */
+void
+periodic_timer_disable(periodic_timer_t *timer)
+{
+  tor_assert(timer);
+  (void) event_del(timer->ev);
+}
+
 /** Stop and free a periodic timer */
 void
 periodic_timer_free_(periodic_timer_t *timer)
@@ -221,6 +296,173 @@ periodic_timer_free_(periodic_timer_t *t
   tor_free(timer);
 }
 
+/**
+ * Type used to represent events that run directly from the main loop,
+ * either because they are activated from elsewhere in the code, or
+ * because they have a simple timeout.
+ *
+ * We use this type to avoid exposing Libevent's API throughout the rest
+ * of the codebase.
+ *
+ * This type can't be used for all events: it doesn't handle events that
+ * are triggered by signals or by sockets.
+ */
+struct mainloop_event_t {
+  struct event *ev;
+  void (*cb)(mainloop_event_t *, void *);
+  void *userdata;
+};
+
+/**
+ * Internal: Implements mainloop event using a libevent event.
+ */
+static void
+mainloop_event_cb(evutil_socket_t fd, short what, void *arg)
+{
+  (void)fd;
+  (void)what;
+  mainloop_event_t *mev = arg;
+  mev->cb(mev, mev->userdata);
+}
+
+/**
+ * As mainloop_event_cb, but implements a post-loop event.
+ */
+static void
+mainloop_event_postloop_cb(evutil_socket_t fd, short what, void *arg)
+{
+  (void)fd;
+  (void)what;
+
+  /* Note that if rescan_mainloop_ev is already activated,
+   * event_active() will do nothing: only the first post-loop event that
+   * happens each time through the event loop will cause it to be
+   * activated.
+   *
+   * Because event_active() puts events on a FIFO queue, every event
+   * that is made active _after_ rescan_mainloop_ev will get its
+   * callback run after rescan_mainloop_cb is called -- that is, on the
+   * next iteration of the loop.
+   */
+  event_active(rescan_mainloop_ev, EV_READ, 1);
+
+  mainloop_event_t *mev = arg;
+  mev->cb(mev, mev->userdata);
+}
+
+/**
+ * Helper for mainloop_event_new() and mainloop_event_postloop_new().
+ */
+static mainloop_event_t *
+mainloop_event_new_impl(int postloop,
+                        void (*cb)(mainloop_event_t *, void *),
+                        void *userdata)
+{
+  tor_assert(cb);
+
+  struct event_base *base = tor_libevent_get_base();
+  mainloop_event_t *mev = tor_malloc_zero(sizeof(mainloop_event_t));
+  mev->ev = tor_event_new(base, -1, 0,
+                  postloop ? mainloop_event_postloop_cb : mainloop_event_cb,
+                  mev);
+  tor_assert(mev->ev);
+  mev->cb = cb;
+  mev->userdata = userdata;
+  return mev;
+}
+
+/**
+ * Create and return a new mainloop_event_t to run the function <b>cb</b>.
+ *
+ * When run, the callback function will be passed the mainloop_event_t
+ * and <b>userdata</b> as its arguments.  The <b>userdata</b> pointer
+ * must remain valid for as long as the mainloop_event_t event exists:
+ * it is your responsibility to free it.
+ *
+ * The event is not scheduled by default: Use mainloop_event_activate()
+ * or mainloop_event_schedule() to make it run.
+ */
+mainloop_event_t *
+mainloop_event_new(void (*cb)(mainloop_event_t *, void *),
+                   void *userdata)
+{
+  return mainloop_event_new_impl(0, cb, userdata);
+}
+
+/**
+ * As mainloop_event_new(), but create a post-loop event.
+ *
+ * A post-loop event behaves like any ordinary event, but any events
+ * that _it_ activates cannot run until Libevent has checked for other
+ * events at least once.
+ */
+mainloop_event_t *
+mainloop_event_postloop_new(void (*cb)(mainloop_event_t *, void *),
+                            void *userdata)
+{
+  return mainloop_event_new_impl(1, cb, userdata);
+}
+
+/**
+ * Schedule <b>event</b> to run in the main loop, immediately.  If it is
+ * not scheduled, it will run anyway. If it is already scheduled to run
+ * later, it will run now instead.  This function will have no effect if
+ * the event is already scheduled to run.
+ *
+ * This function may only be called from the main thread.
+ */
+void
+mainloop_event_activate(mainloop_event_t *event)
+{
+  tor_assert(event);
+  event_active(event->ev, EV_READ, 1);
+}
+
+/** Schedule <b>event</b> to run in the main loop, after a delay of <b>tv</b>.
+ *
+ * If the event is scheduled for a different time, cancel it and run
+ * after this delay instead.  If the event is currently pending to run
+ * <em>now</b>, has no effect.
+ *
+ * Do not call this function with <b>tv</b> == NULL -- use
+ * mainloop_event_activate() instead.
+ *
+ * This function may only be called from the main thread.
+ */
+int
+mainloop_event_schedule(mainloop_event_t *event, const struct timeval *tv)
+{
+  tor_assert(event);
+  if (BUG(tv == NULL)) {
+    // LCOV_EXCL_START
+    mainloop_event_activate(event);
+    return 0;
+    // LCOV_EXCL_STOP
+  }
+  return event_add(event->ev, tv);
+}
+
+/** Cancel <b>event</b> if it is currently active or pending. (Do nothing if
+ * the event is not currently active or pending.) */
+void
+mainloop_event_cancel(mainloop_event_t *event)
+{
+  if (!event)
+    return;
+  (void) event_del(event->ev);
+}
+
+/** Cancel <b>event</b> and release all storage associated with it. */
+void
+mainloop_event_free_(mainloop_event_t *event)
+{
+  if (!event)
+    return;
+  tor_event_free(event->ev);
+  memset(event, 0xb8, sizeof(*event));
+  tor_free(event);
+}
+
 int
 tor_init_libevent_rng(void)
 {
@@ -243,56 +485,45 @@ tor_init_libevent_rng(void)
 void
 tor_libevent_free_all(void)
 {
+  tor_event_free(rescan_mainloop_ev);
   if (the_event_base)
     event_base_free(the_event_base);
   the_event_base = NULL;
 }
 
-#if defined(LIBEVENT_VERSION_NUMBER) &&         \
-  LIBEVENT_VERSION_NUMBER >= V(2,1,1) &&        \
-  !defined(TOR_UNIT_TESTS)
-void
-tor_gettimeofday_cached(struct timeval *tv)
-{
-  event_base_gettimeofday_cached(the_event_base, tv);
-}
-void
-tor_gettimeofday_cache_clear(void)
-{
-  event_base_update_cache_time(the_event_base);
-}
-#else /* !(defined(LIBEVENT_VERSION_NUMBER) &&         ...) */
-/** Cache the current hi-res time; the cache gets reset when libevent
- * calls us. */
-static struct timeval cached_time_hires = {0, 0};
-
-/** Return a fairly recent view of the current time. */
-void
-tor_gettimeofday_cached(struct timeval *tv)
+/**
+ * Run the event loop for the provided event_base, handling events until
+ * something stops it.  If <b>once</b> is set, then just poll-and-run
+ * once, then exit.  Return 0 on success, -1 if an error occurred, or 1
+ * if we exited because no events were pending or active.
+ *
+ * This isn't reentrant or multithreaded.
+ */
+int
+tor_libevent_run_event_loop(struct event_base *base, int once)
 {
-  if (cached_time_hires.tv_sec == 0) {
-    tor_gettimeofday(&cached_time_hires);
-  }
-  *tv = cached_time_hires;
+  const int flags = once ? EVLOOP_ONCE : 0;
+  return event_base_loop(base, flags);
 }
 
-/** Reset the cached view of the current time, so that the next time we try
- * to learn it, we will get an up-to-date value. */
+/** Tell the event loop to exit after <b>delay</b>.  If <b>delay</b> is NULL,
+ * instead exit after we're done running the currently active events. */
 void
-tor_gettimeofday_cache_clear(void)
+tor_libevent_exit_loop_after_delay(struct event_base *base,
+                                   const struct timeval *delay)
 {
-  cached_time_hires.tv_sec = 0;
+  event_base_loopexit(base, delay);
 }
 
-#ifdef TOR_UNIT_TESTS
-/** For testing: force-update the cached time to a given value. */
+/** Tell the event loop to exit after running whichever callback is currently
+ * active. */
 void
-tor_gettimeofday_cache_set(const struct timeval *tv)
+tor_libevent_exit_loop_after_callback(struct event_base *base)
 {
-  tor_assert(tv);
-  memcpy(&cached_time_hires, tv, sizeof(*tv));
+  event_base_loopbreak(base);
 }
 
+#if defined(TOR_UNIT_TESTS)
 /** For testing: called post-fork to make libevent reinitialize
  * kernel structures. */
 void
@@ -302,5 +533,4 @@ tor_libevent_postfork(void)
   tor_assert(r == 0);
 }
 #endif /* defined(TOR_UNIT_TESTS) */
-#endif /* defined(LIBEVENT_VERSION_NUMBER) &&         ... */
 
diff -pruN 0.3.3.9-1/src/common/compat_libevent.h 0.3.4.8-1/src/common/compat_libevent.h
--- 0.3.3.9-1/src/common/compat_libevent.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_libevent.h	2018-06-15 21:20:53.000000000 +0000
@@ -7,8 +7,6 @@
 #include "orconfig.h"
 #include "testsupport.h"
 
-#include <event2/event.h>
-
 void configure_libevent_logging(void);
 void suppress_libevent_log_msg(const char *msg);
 
@@ -19,6 +17,9 @@ void suppress_libevent_log_msg(const cha
   evdns_add_server_port_with_base(tor_libevent_get_base(), \
   (sock),(tcp),(cb),(data));
 
+struct event;
+struct event_base;
+
 void tor_event_free_(struct event *ev);
 #define tor_event_free(ev) \
   FREE_AND_NULL(struct event, tor_event_free_, (ev))
@@ -30,11 +31,24 @@ periodic_timer_t *periodic_timer_new(str
              void (*cb)(periodic_timer_t *timer, void *data),
              void *data);
 void periodic_timer_free_(periodic_timer_t *);
+void periodic_timer_launch(periodic_timer_t *, const struct timeval *tv);
+void periodic_timer_disable(periodic_timer_t *);
 #define periodic_timer_free(t) \
   FREE_AND_NULL(periodic_timer_t, periodic_timer_free_, (t))
 
-#define tor_event_base_loopexit event_base_loopexit
-#define tor_event_base_loopbreak event_base_loopbreak
+typedef struct mainloop_event_t mainloop_event_t;
+mainloop_event_t *mainloop_event_new(void (*cb)(mainloop_event_t *, void *),
+                                     void *userdata);
+mainloop_event_t * mainloop_event_postloop_new(
+                                     void (*cb)(mainloop_event_t *, void *),
+                                     void *userdata);
+void mainloop_event_activate(mainloop_event_t *event);
+int mainloop_event_schedule(mainloop_event_t *event,
+                            const struct timeval *delay);
+void mainloop_event_cancel(mainloop_event_t *event);
+void mainloop_event_free_(mainloop_event_t *event);
+#define mainloop_event_free(event) \
+  FREE_AND_NULL(mainloop_event_t, mainloop_event_free_, (event))
 
 /** Defines a configuration for using libevent with Tor: passed as an argument
  * to tor_libevent_initialize() to describe how we want to set up. */
@@ -56,13 +70,15 @@ void tor_libevent_free_all(void);
 
 int tor_init_libevent_rng(void);
 
-void tor_gettimeofday_cached(struct timeval *tv);
-void tor_gettimeofday_cache_clear(void);
 #ifdef TOR_UNIT_TESTS
-void tor_gettimeofday_cache_set(const struct timeval *tv);
 void tor_libevent_postfork(void);
 #endif
 
+int tor_libevent_run_event_loop(struct event_base *base, int once);
+void tor_libevent_exit_loop_after_delay(struct event_base *base,
+                                        const struct timeval *delay);
+void tor_libevent_exit_loop_after_callback(struct event_base *base);
+
 #ifdef COMPAT_LIBEVENT_PRIVATE
 
 /** Macro: returns the number of a Libevent version as a 4-byte number,
diff -pruN 0.3.3.9-1/src/common/compat_threads.c 0.3.4.8-1/src/common/compat_threads.c
--- 0.3.3.9-1/src/common/compat_threads.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_threads.c	2018-08-15 06:18:54.000000000 +0000
@@ -352,7 +352,7 @@ alert_sockets_close(alert_sockets_t *soc
   socks->read_fd = socks->write_fd = -1;
 }
 
-#ifndef HAVE_STDATOMIC_H
+#ifndef HAVE_WORKING_STDATOMIC
 /** Initialize a new atomic counter with the value 0 */
 void
 atomic_counter_init(atomic_counter_t *counter)
@@ -403,5 +403,4 @@ atomic_counter_exchange(atomic_counter_t
   tor_mutex_release(&counter->mutex);
   return oldval;
 }
-#endif /* !defined(HAVE_STDATOMIC_H) */
-
+#endif /* !defined(HAVE_WORKING_STDATOMIC) */
diff -pruN 0.3.3.9-1/src/common/compat_threads.h 0.3.4.8-1/src/common/compat_threads.h
--- 0.3.3.9-1/src/common/compat_threads.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_threads.h	2018-08-15 06:18:54.000000000 +0000
@@ -14,7 +14,11 @@
 #include <pthread.h>
 #endif
 
-#ifdef HAVE_STDATOMIC_H
+#if defined(HAVE_STDATOMIC_H) && defined(STDATOMIC_WORKS)
+#define HAVE_WORKING_STDATOMIC
+#endif
+
+#ifdef HAVE_WORKING_STDATOMIC
 #include <stdatomic.h>
 #endif
 
@@ -156,18 +160,18 @@ void tor_threadlocal_set(tor_threadlocal
 /**
  * Atomic counter type; holds a size_t value.
  */
-#ifdef HAVE_STDATOMIC_H
+#ifdef HAVE_WORKING_STDATOMIC
 typedef struct atomic_counter_t {
   atomic_size_t val;
 } atomic_counter_t;
 #define ATOMIC_LINKAGE static
-#else /* !(defined(HAVE_STDATOMIC_H)) */
+#else /* !(defined(HAVE_WORKING_STDATOMIC)) */
 typedef struct atomic_counter_t {
   tor_mutex_t mutex;
   size_t val;
 } atomic_counter_t;
 #define ATOMIC_LINKAGE
-#endif /* defined(HAVE_STDATOMIC_H) */
+#endif /* defined(HAVE_WORKING_STDATOMIC) */
 
 ATOMIC_LINKAGE void atomic_counter_init(atomic_counter_t *counter);
 ATOMIC_LINKAGE void atomic_counter_destroy(atomic_counter_t *counter);
@@ -178,7 +182,7 @@ ATOMIC_LINKAGE size_t atomic_counter_exc
                                               size_t newval);
 #undef ATOMIC_LINKAGE
 
-#ifdef HAVE_STDATOMIC_H
+#ifdef HAVE_WORKING_STDATOMIC
 /** Initialize a new atomic counter with the value 0 */
 static inline void
 atomic_counter_init(atomic_counter_t *counter)
@@ -216,8 +220,7 @@ atomic_counter_exchange(atomic_counter_t
   return atomic_exchange(&counter->val, newval);
 }
 
-#else /* !(defined(HAVE_STDATOMIC_H)) */
-#endif /* defined(HAVE_STDATOMIC_H) */
+#else /* !(defined(HAVE_WORKING_STDATOMIC)) */
+#endif /* defined(HAVE_WORKING_STDATOMIC) */
 
 #endif /* !defined(TOR_COMPAT_THREADS_H) */
-
diff -pruN 0.3.3.9-1/src/common/compat_time.c 0.3.4.8-1/src/common/compat_time.c
--- 0.3.3.9-1/src/common/compat_time.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_time.c	2018-06-15 21:20:53.000000000 +0000
@@ -71,8 +71,8 @@ tor_sleep_msec(int msec)
 /** Set *timeval to the current time of day.  On error, log and terminate.
  * (Same as gettimeofday(timeval,NULL), but never returns -1.)
  */
-void
-tor_gettimeofday(struct timeval *timeval)
+MOCK_IMPL(void,
+tor_gettimeofday, (struct timeval *timeval))
 {
 #ifdef _WIN32
   /* Epoch bias copied from perl: number of units between windows epoch and
@@ -279,6 +279,7 @@ monotime_reset_ratchets_for_testing(void
  * nanoseconds.
  */
 static struct mach_timebase_info mach_time_info;
+static struct mach_timebase_info mach_time_info_msec_cvt;
 static int monotime_shift = 0;
 
 static void
@@ -296,6 +297,14 @@ monotime_init_internal(void)
     // requires that tor_log2(0) == 0.
     monotime_shift = tor_log2(ms_per_tick);
   }
+  {
+    // For converting ticks to milliseconds in a 32-bit-friendly way, we
+    // will first right-shift by 20, and then multiply by 20/19, since
+    // (1<<20) * 19/20 is about 1e6.  We precompute a new numerate and
+    // denominator here to avoid multiple multiplies.
+    mach_time_info_msec_cvt.numer = mach_time_info.numer * 20;
+    mach_time_info_msec_cvt.denom = mach_time_info.denom * 19;
+  }
 }
 
 /**
@@ -345,6 +354,22 @@ monotime_diff_nsec(const monotime_t *sta
   return diff_nsec;
 }
 
+int32_t
+monotime_coarse_diff_msec32_(const monotime_coarse_t *start,
+                             const monotime_coarse_t *end)
+{
+  if (BUG(mach_time_info.denom == 0)) {
+    monotime_init();
+  }
+  const int64_t diff_ticks = end->abstime_ - start->abstime_;
+
+  /* We already require in di_ops.c that right-shift performs a sign-extend. */
+  const int32_t diff_microticks = (int32_t)(diff_ticks >> 20);
+
+  return (diff_microticks * mach_time_info_msec_cvt.numer) /
+    mach_time_info_msec_cvt.denom;
+}
+
 uint32_t
 monotime_coarse_to_stamp(const monotime_coarse_t *t)
 {
@@ -443,6 +468,15 @@ monotime_diff_nsec(const monotime_t *sta
   return diff_nsec;
 }
 
+int32_t
+monotime_coarse_diff_msec32_(const monotime_coarse_t *start,
+                             const monotime_coarse_t *end)
+{
+  const int32_t diff_sec = (int32_t)(end->ts_.tv_sec - start->ts_.tv_sec);
+  const int32_t diff_nsec = (int32_t)(end->ts_.tv_nsec - start->ts_.tv_nsec);
+  return diff_sec * 1000 + diff_nsec / ONE_MILLION;
+}
+
 /* This value is ONE_BILLION >> 20. */
 static const uint32_t STAMP_TICKS_PER_SECOND = 953;
 
@@ -592,6 +626,13 @@ monotime_coarse_diff_msec(const monotime
   return diff_ticks;
 }
 
+int32_t
+monotime_coarse_diff_msec32_(const monotime_coarse_t *start,
+                             const monotime_coarse_t *end)
+{
+  return (int32_t)monotime_coarse_diff_msec(start, end);
+}
+
 int64_t
 monotime_coarse_diff_usec(const monotime_coarse_t *start,
                           const monotime_coarse_t *end)
@@ -677,6 +718,15 @@ monotime_diff_nsec(const monotime_t *sta
   return (diff.tv_sec * ONE_BILLION + diff.tv_usec * 1000);
 }
 
+int32_t
+monotime_coarse_diff_msec32_(const monotime_coarse_t *start,
+                             const monotime_coarse_t *end)
+{
+  struct timeval diff;
+  timersub(&end->tv_, &start->tv_, &diff);
+  return diff.tv_sec * 1000 + diff.tv_usec / 1000;
+}
+
 /* This value is ONE_MILLION >> 10. */
 static const uint32_t STAMP_TICKS_PER_SECOND = 976;
 
@@ -830,11 +880,24 @@ monotime_coarse_stamp_units_to_approx_ms
   return (abstime_diff * mach_time_info.numer) /
     (mach_time_info.denom * ONE_MILLION);
 }
+uint64_t
+monotime_msec_to_approx_coarse_stamp_units(uint64_t msec)
+{
+  uint64_t abstime_val =
+    (((uint64_t)msec) * ONE_MILLION * mach_time_info.denom) /
+    mach_time_info.numer;
+  return abstime_val >> monotime_shift;
+}
 #else
 uint64_t
 monotime_coarse_stamp_units_to_approx_msec(uint64_t units)
 {
   return (units * 1000) / STAMP_TICKS_PER_SECOND;
 }
+uint64_t
+monotime_msec_to_approx_coarse_stamp_units(uint64_t msec)
+{
+  return (msec * STAMP_TICKS_PER_SECOND) / 1000;
+}
 #endif
 
diff -pruN 0.3.3.9-1/src/common/compat_time.h 0.3.4.8-1/src/common/compat_time.h
--- 0.3.3.9-1/src/common/compat_time.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_time.h	2018-06-15 21:20:53.000000000 +0000
@@ -150,6 +150,7 @@ uint32_t monotime_coarse_to_stamp(const
  * into an approximate number of milliseconds.
  */
 uint64_t monotime_coarse_stamp_units_to_approx_msec(uint64_t units);
+uint64_t monotime_msec_to_approx_coarse_stamp_units(uint64_t msec);
 uint32_t monotime_coarse_get_stamp(void);
 
 #if defined(MONOTIME_COARSE_TYPE_IS_DIFFERENT)
@@ -172,7 +173,34 @@ void monotime_coarse_add_msec(monotime_c
 #define monotime_coarse_add_msec monotime_add_msec
 #endif /* defined(MONOTIME_COARSE_TYPE_IS_DIFFERENT) */
 
-void tor_gettimeofday(struct timeval *timeval);
+/**
+ * As monotime_coarse_diff_msec, but avoid 64-bit division.
+ *
+ * Requires that the difference fit into an int32_t; not for use with
+ * large time differences.
+ */
+int32_t monotime_coarse_diff_msec32_(const monotime_coarse_t *start,
+                                     const monotime_coarse_t *end);
+
+/**
+ * As monotime_coarse_diff_msec, but avoid 64-bit division if it is expensive.
+ *
+ * Requires that the difference fit into an int32_t; not for use with
+ * large time differences.
+ */
+static inline int32_t
+monotime_coarse_diff_msec32(const monotime_coarse_t *start,
+                            const monotime_coarse_t *end)
+{
+#if SIZEOF_VOID_P == 8
+  // on a 64-bit platform, let's assume 64/64 division is cheap.
+  return (int32_t) monotime_coarse_diff_msec(start, end);
+#else
+  return monotime_coarse_diff_msec32_(start, end);
+#endif
+}
+
+MOCK_DECL(void, tor_gettimeofday, (struct timeval *timeval));
 
 #ifdef TOR_UNIT_TESTS
 void tor_sleep_msec(int msec);
diff -pruN 0.3.3.9-1/src/common/compat_winthreads.c 0.3.4.8-1/src/common/compat_winthreads.c
--- 0.3.3.9-1/src/common/compat_winthreads.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compat_winthreads.c	2018-06-15 21:20:53.000000000 +0000
@@ -18,7 +18,6 @@
 #include "util.h"
 #include "container.h"
 #include "torlog.h"
-#include <process.h>
 
 /* This value is more or less total cargo-cult */
 #define SPIN_COUNT 2000
diff -pruN 0.3.3.9-1/src/common/compress.c 0.3.4.8-1/src/common/compress.c
--- 0.3.3.9-1/src/common/compress.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compress.c	2018-06-15 21:20:53.000000000 +0000
@@ -663,3 +663,13 @@ tor_compress_init(void)
   tor_zstd_init();
 }
 
+/** Warn if we had any problems while setting up our compression libraries.
+ *
+ * (This isn't part of tor_compress_init, since the logs aren't set up yet.)
+ */
+void
+tor_compress_log_init_warnings(void)
+{
+  tor_zstd_warn_if_version_mismatched();
+}
+
diff -pruN 0.3.3.9-1/src/common/compress.h 0.3.4.8-1/src/common/compress.h
--- 0.3.3.9-1/src/common/compress.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compress.h	2018-06-15 21:20:53.000000000 +0000
@@ -87,6 +87,7 @@ void tor_compress_free_(tor_compress_sta
 size_t tor_compress_state_size(const tor_compress_state_t *state);
 
 void tor_compress_init(void);
+void tor_compress_log_init_warnings(void);
 
 #endif /* !defined(TOR_COMPRESS_H) */
 
diff -pruN 0.3.3.9-1/src/common/compress_zstd.c 0.3.4.8-1/src/common/compress_zstd.c
--- 0.3.3.9-1/src/common/compress_zstd.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compress_zstd.c	2018-07-30 12:17:25.000000000 +0000
@@ -18,11 +18,22 @@
 #include "compress.h"
 #include "compress_zstd.h"
 
+#ifdef ENABLE_ZSTD_ADVANCED_APIS
+/* This is a lie, but we make sure it doesn't get us in trouble by wrapping
+ * all invocations of zstd's static-only functions in a check to make sure
+ * that the compile-time version matches the run-time version. */
+#define ZSTD_STATIC_LINKING_ONLY
+#endif
+
 #ifdef HAVE_ZSTD
+#ifdef HAVE_CFLAG_WUNUSED_CONST_VARIABLE
 DISABLE_GCC_WARNING(unused-const-variable)
+#endif
 #include <zstd.h>
+#ifdef HAVE_CFLAG_WUNUSED_CONST_VARIABLE
 ENABLE_GCC_WARNING(unused-const-variable)
 #endif
+#endif
 
 /** Total number of bytes allocated for Zstandard state. */
 static atomic_counter_t total_zstd_allocation;
@@ -53,21 +64,31 @@ tor_zstd_method_supported(void)
 #endif
 }
 
+#ifdef HAVE_ZSTD
+/** Format a zstd version number as a string in <b>buf</b>. */
+static void
+tor_zstd_format_version(char *buf, size_t buflen, unsigned version_number)
+{
+  tor_snprintf(buf, buflen,
+               "%u.%u.%u",
+               version_number / 10000 % 100,
+               version_number / 100 % 100,
+               version_number % 100);
+}
+#endif
+
+#define VERSION_STR_MAX_LEN 16 /* more than enough space for 99.99.99 */
+
 /** Return a string representation of the version of the currently running
  * version of libzstd. Returns NULL if Zstandard is unsupported. */
 const char *
 tor_zstd_get_version_str(void)
 {
 #ifdef HAVE_ZSTD
-  static char version_str[16];
-  size_t version_number;
+  static char version_str[VERSION_STR_MAX_LEN];
 
-  version_number = ZSTD_versionNumber();
-  tor_snprintf(version_str, sizeof(version_str),
-               "%d.%d.%d",
-               (int) version_number / 10000 % 100,
-               (int) version_number / 100 % 100,
-               (int) version_number % 100);
+  tor_zstd_format_version(version_str, sizeof(version_str),
+                          ZSTD_versionNumber());
 
   return version_str;
 #else /* !(defined(HAVE_ZSTD)) */
@@ -87,6 +108,26 @@ tor_zstd_get_header_version_str(void)
 #endif
 }
 
+#ifdef TOR_UNIT_TESTS
+static int static_apis_disable_for_testing = 0;
+#endif
+
+/** Return true iff we can use the "static-only" APIs. */
+int
+tor_zstd_can_use_static_apis(void)
+{
+#if defined(ZSTD_STATIC_LINKING_ONLY) && defined(HAVE_ZSTD)
+#ifdef TOR_UNIT_TESTS
+  if (static_apis_disable_for_testing) {
+    return 0;
+  }
+#endif
+  return (ZSTD_VERSION_NUMBER == ZSTD_versionNumber());
+#else
+  return 0;
+#endif
+}
+
 /** Internal Zstandard state for incremental compression/decompression.
  * The body of this struct is not exposed. */
 struct tor_zstd_compress_state_t {
@@ -114,9 +155,11 @@ struct tor_zstd_compress_state_t {
 
 #ifdef HAVE_ZSTD
 /** Return an approximate number of bytes stored in memory to hold the
- * Zstandard compression/decompression state. */
+ * Zstandard compression/decompression state. This is a fake estimate
+ * based on inspecting the zstd source: tor_zstd_state_size_precalc() is
+ * more accurate when it's allowed to use "static-only" functions */
 static size_t
-tor_zstd_state_size_precalc(int compress, int preset)
+tor_zstd_state_size_precalc_fake(int compress, int preset)
 {
   tor_assert(preset > 0);
 
@@ -173,6 +216,28 @@ tor_zstd_state_size_precalc(int compress
 
   return memory_usage;
 }
+
+/** Return an approximate number of bytes stored in memory to hold the
+ * Zstandard compression/decompression state. */
+static size_t
+tor_zstd_state_size_precalc(int compress, int preset)
+{
+#ifdef ZSTD_STATIC_LINKING_ONLY
+  if (tor_zstd_can_use_static_apis()) {
+    if (compress) {
+#ifdef HAVE_ZSTD_ESTIMATECSTREAMSIZE
+      return ZSTD_estimateCStreamSize(preset);
+#endif
+    } else {
+#ifdef HAVE_ZSTD_ESTIMATEDCTXSIZE
+      /* Could use DStream, but that takes a windowSize. */
+      return ZSTD_estimateDCtxSize();
+#endif
+    }
+  }
+#endif
+  return tor_zstd_state_size_precalc_fake(compress, preset);
+}
 #endif /* defined(HAVE_ZSTD) */
 
 /** Construct and return a tor_zstd_compress_state_t object using
@@ -442,3 +507,34 @@ tor_zstd_init(void)
   atomic_counter_init(&total_zstd_allocation);
 }
 
+/** Warn if the header and library versions don't match. */
+void
+tor_zstd_warn_if_version_mismatched(void)
+{
+#if defined(HAVE_ZSTD) && defined(ENABLE_ZSTD_ADVANCED_APIS)
+  if (! tor_zstd_can_use_static_apis()) {
+    char header_version[VERSION_STR_MAX_LEN];
+    char runtime_version[VERSION_STR_MAX_LEN];
+    tor_zstd_format_version(header_version, sizeof(header_version),
+                            ZSTD_VERSION_NUMBER);
+    tor_zstd_format_version(runtime_version, sizeof(runtime_version),
+                            ZSTD_versionNumber());
+
+    log_warn(LD_GENERAL,
+             "Tor was compiled with zstd %s, but is running with zstd %s. "
+             "For safety, we'll avoid using advanced zstd functionality.",
+             header_version, runtime_version);
+  }
+#endif
+}
+
+#ifdef TOR_UNIT_TESTS
+/** Testing only: disable usage of static-only APIs, so we can make sure that
+ * we still work without them. */
+void
+tor_zstd_set_static_apis_disabled_for_testing(int disabled)
+{
+  static_apis_disable_for_testing = disabled;
+}
+#endif
+
diff -pruN 0.3.3.9-1/src/common/compress_zstd.h 0.3.4.8-1/src/common/compress_zstd.h
--- 0.3.3.9-1/src/common/compress_zstd.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/compress_zstd.h	2018-06-15 21:20:53.000000000 +0000
@@ -17,6 +17,8 @@ const char *tor_zstd_get_version_str(voi
 
 const char *tor_zstd_get_header_version_str(void);
 
+int tor_zstd_can_use_static_apis(void);
+
 /** Internal state for an incremental Zstandard compression/decompression. */
 typedef struct tor_zstd_compress_state_t tor_zstd_compress_state_t;
 
@@ -41,6 +43,11 @@ size_t tor_zstd_compress_state_size(cons
 size_t tor_zstd_get_total_allocation(void);
 
 void tor_zstd_init(void);
+void tor_zstd_warn_if_version_mismatched(void);
+
+#ifdef TOR_UNIT_TESTS
+void tor_zstd_set_static_apis_disabled_for_testing(int disabled);
+#endif
 
 #endif /* !defined(TOR_COMPRESS_ZSTD_H) */
 
diff -pruN 0.3.3.9-1/src/common/container.c 0.3.4.8-1/src/common/container.c
--- 0.3.3.9-1/src/common/container.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/container.c	2018-06-15 21:20:53.000000000 +0000
@@ -15,7 +15,7 @@
 #include "util.h"
 #include "torlog.h"
 #include "container.h"
-#include "crypto.h"
+#include "crypto_digest.h"
 
 #include <stdlib.h>
 #include <string.h>
diff -pruN 0.3.3.9-1/src/common/crypto.c 0.3.4.8-1/src/common/crypto.c
--- 0.3.3.9-1/src/common/crypto.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto.c	2018-06-15 21:20:53.000000000 +0000
@@ -23,25 +23,26 @@
 #endif /* defined(_WIN32) */
 
 #define CRYPTO_PRIVATE
-#include "crypto.h"
 #include "compat_openssl.h"
+#include "crypto.h"
 #include "crypto_curve25519.h"
+#include "crypto_digest.h"
 #include "crypto_ed25519.h"
 #include "crypto_format.h"
+#include "crypto_rand.h"
 #include "crypto_rsa.h"
+#include "crypto_util.h"
 
 DISABLE_GCC_WARNING(redundant-decls)
 
 #include <openssl/err.h>
-#include <openssl/rsa.h>
-#include <openssl/pem.h>
 #include <openssl/evp.h>
 #include <openssl/engine.h>
-#include <openssl/rand.h>
 #include <openssl/bn.h>
 #include <openssl/dh.h>
 #include <openssl/conf.h>
 #include <openssl/hmac.h>
+#include <openssl/ssl.h>
 
 ENABLE_GCC_WARNING(redundant-decls)
 
@@ -59,18 +60,6 @@ ENABLE_GCC_WARNING(redundant-decls)
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_SYS_FCNTL_H
-#include <sys/fcntl.h>
-#endif
-#ifdef HAVE_SYS_SYSCALL_H
-#include <sys/syscall.h>
-#endif
-#ifdef HAVE_SYS_RANDOM_H
-#include <sys/random.h>
-#endif
 
 #include "torlog.h"
 #include "torint.h"
@@ -83,12 +72,6 @@ ENABLE_GCC_WARNING(redundant-decls)
 
 #include "keccak-tiny/keccak-tiny.h"
 
-/** Longest recognized */
-#define MAX_DNS_LABEL_SIZE 63
-
-/** Largest strong entropy request */
-#define MAX_STRONGEST_RAND_SIZE 256
-
 /** A structure to hold the first half (x, g^x) of a Diffie-Hellman handshake
  * while we're waiting for the second.*/
 struct crypto_dh_t {
@@ -161,23 +144,6 @@ try_load_engine(const char *path, const
 }
 #endif /* !defined(DISABLE_ENGINES) */
 
-/** Make sure that openssl is using its default PRNG. Return 1 if we had to
- * adjust it; 0 otherwise. */
-STATIC int
-crypto_force_rand_ssleay(void)
-{
-  RAND_METHOD *default_method;
-  default_method = RAND_OpenSSL();
-  if (RAND_get_rand_method() != default_method) {
-    log_notice(LD_CRYPTO, "It appears that one of our engines has provided "
-               "a replacement the OpenSSL RNG. Resetting it to the default "
-               "implementation.");
-    RAND_set_rand_method(default_method);
-    return 1;
-  }
-  return 0;
-}
-
 static int have_seeded_siphash = 0;
 
 /** Set up the siphash key if we haven't already done so. */
@@ -203,8 +169,15 @@ crypto_early_init(void)
 
     crypto_early_initialized_ = 1;
 
+#ifdef OPENSSL_1_1_API
+    OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS |
+                     OPENSSL_INIT_LOAD_CRYPTO_STRINGS |
+                     OPENSSL_INIT_ADD_ALL_CIPHERS |
+                     OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
+#else
     ERR_load_crypto_strings();
     OpenSSL_add_all_algorithms();
+#endif
 
     setup_openssl_threading();
 
@@ -397,266 +370,6 @@ crypto_cipher_free_(crypto_cipher_t *env
   aes_cipher_free(env);
 }
 
-/* public key crypto */
-
-/** Check a siglen-byte long signature at <b>sig</b> against
- * <b>datalen</b> bytes of data at <b>data</b>, using the public key
- * in <b>env</b>. Return 0 if <b>sig</b> is a correct signature for
- * SHA1(data).  Else return -1.
- */
-MOCK_IMPL(int,
-crypto_pk_public_checksig_digest,(crypto_pk_t *env, const char *data,
-                                  size_t datalen, const char *sig,
-                                  size_t siglen))
-{
-  char digest[DIGEST_LEN];
-  char *buf;
-  size_t buflen;
-  int r;
-
-  tor_assert(env);
-  tor_assert(data);
-  tor_assert(sig);
-  tor_assert(datalen < SIZE_T_CEILING);
-  tor_assert(siglen < SIZE_T_CEILING);
-
-  if (crypto_digest(digest,data,datalen)<0) {
-    log_warn(LD_BUG, "couldn't compute digest");
-    return -1;
-  }
-  buflen = crypto_pk_keysize(env);
-  buf = tor_malloc(buflen);
-  r = crypto_pk_public_checksig(env,buf,buflen,sig,siglen);
-  if (r != DIGEST_LEN) {
-    log_warn(LD_CRYPTO, "Invalid signature");
-    tor_free(buf);
-    return -1;
-  }
-  if (tor_memneq(buf, digest, DIGEST_LEN)) {
-    log_warn(LD_CRYPTO, "Signature mismatched with digest.");
-    tor_free(buf);
-    return -1;
-  }
-  tor_free(buf);
-
-  return 0;
-}
-
-/** Compute a SHA1 digest of <b>fromlen</b> bytes of data stored at
- * <b>from</b>; sign the data with the private key in <b>env</b>, and
- * store it in <b>to</b>.  Return the number of bytes written on
- * success, and -1 on failure.
- *
- * <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
- * at least the length of the modulus of <b>env</b>.
- */
-int
-crypto_pk_private_sign_digest(crypto_pk_t *env, char *to, size_t tolen,
-                              const char *from, size_t fromlen)
-{
-  int r;
-  char digest[DIGEST_LEN];
-  if (crypto_digest(digest,from,fromlen)<0)
-    return -1;
-  r = crypto_pk_private_sign(env,to,tolen,digest,DIGEST_LEN);
-  memwipe(digest, 0, sizeof(digest));
-  return r;
-}
-
-/** Perform a hybrid (public/secret) encryption on <b>fromlen</b>
- * bytes of data from <b>from</b>, with padding type 'padding',
- * storing the results on <b>to</b>.
- *
- * Returns the number of bytes written on success, -1 on failure.
- *
- * The encrypted data consists of:
- *   - The source data, padded and encrypted with the public key, if the
- *     padded source data is no longer than the public key, and <b>force</b>
- *     is false, OR
- *   - The beginning of the source data prefixed with a 16-byte symmetric key,
- *     padded and encrypted with the public key; followed by the rest of
- *     the source data encrypted in AES-CTR mode with the symmetric key.
- *
- * NOTE that this format does not authenticate the symmetrically encrypted
- * part of the data, and SHOULD NOT BE USED for new protocols.
- */
-int
-crypto_pk_obsolete_public_hybrid_encrypt(crypto_pk_t *env,
-                                char *to, size_t tolen,
-                                const char *from,
-                                size_t fromlen,
-                                int padding, int force)
-{
-  int overhead, outlen, r;
-  size_t pkeylen, symlen;
-  crypto_cipher_t *cipher = NULL;
-  char *buf = NULL;
-
-  tor_assert(env);
-  tor_assert(from);
-  tor_assert(to);
-  tor_assert(fromlen < SIZE_T_CEILING);
-
-  overhead = crypto_get_rsa_padding_overhead(crypto_get_rsa_padding(padding));
-  pkeylen = crypto_pk_keysize(env);
-
-  if (!force && fromlen+overhead <= pkeylen) {
-    /* It all fits in a single encrypt. */
-    return crypto_pk_public_encrypt(env,to,
-                                    tolen,
-                                    from,fromlen,padding);
-  }
-  tor_assert(tolen >= fromlen + overhead + CIPHER_KEY_LEN);
-  tor_assert(tolen >= pkeylen);
-
-  char key[CIPHER_KEY_LEN];
-  crypto_rand(key, sizeof(key)); /* generate a new key. */
-  cipher = crypto_cipher_new(key);
-
-  buf = tor_malloc(pkeylen+1);
-  memcpy(buf, key, CIPHER_KEY_LEN);
-  memcpy(buf+CIPHER_KEY_LEN, from, pkeylen-overhead-CIPHER_KEY_LEN);
-
-  /* Length of symmetrically encrypted data. */
-  symlen = fromlen-(pkeylen-overhead-CIPHER_KEY_LEN);
-
-  outlen = crypto_pk_public_encrypt(env,to,tolen,buf,pkeylen-overhead,padding);
-  if (outlen!=(int)pkeylen) {
-    goto err;
-  }
-  r = crypto_cipher_encrypt(cipher, to+outlen,
-                            from+pkeylen-overhead-CIPHER_KEY_LEN, symlen);
-
-  if (r<0) goto err;
-  memwipe(buf, 0, pkeylen);
-  memwipe(key, 0, sizeof(key));
-  tor_free(buf);
-  crypto_cipher_free(cipher);
-  tor_assert(outlen+symlen < INT_MAX);
-  return (int)(outlen + symlen);
- err:
-
-  memwipe(buf, 0, pkeylen);
-  memwipe(key, 0, sizeof(key));
-  tor_free(buf);
-  crypto_cipher_free(cipher);
-  return -1;
-}
-
-/** Invert crypto_pk_obsolete_public_hybrid_encrypt. Returns the number of
- * bytes written on success, -1 on failure.
- *
- * NOTE that this format does not authenticate the symmetrically encrypted
- * part of the data, and SHOULD NOT BE USED for new protocols.
- */
-int
-crypto_pk_obsolete_private_hybrid_decrypt(crypto_pk_t *env,
-                                 char *to,
-                                 size_t tolen,
-                                 const char *from,
-                                 size_t fromlen,
-                                 int padding, int warnOnFailure)
-{
-  int outlen, r;
-  size_t pkeylen;
-  crypto_cipher_t *cipher = NULL;
-  char *buf = NULL;
-
-  tor_assert(fromlen < SIZE_T_CEILING);
-  pkeylen = crypto_pk_keysize(env);
-
-  if (fromlen <= pkeylen) {
-    return crypto_pk_private_decrypt(env,to,tolen,from,fromlen,padding,
-                                     warnOnFailure);
-  }
-
-  buf = tor_malloc(pkeylen);
-  outlen = crypto_pk_private_decrypt(env,buf,pkeylen,from,pkeylen,padding,
-                                     warnOnFailure);
-  if (outlen<0) {
-    log_fn(warnOnFailure?LOG_WARN:LOG_DEBUG, LD_CRYPTO,
-           "Error decrypting public-key data");
-    goto err;
-  }
-  if (outlen < CIPHER_KEY_LEN) {
-    log_fn(warnOnFailure?LOG_WARN:LOG_INFO, LD_CRYPTO,
-           "No room for a symmetric key");
-    goto err;
-  }
-  cipher = crypto_cipher_new(buf);
-  if (!cipher) {
-    goto err;
-  }
-  memcpy(to,buf+CIPHER_KEY_LEN,outlen-CIPHER_KEY_LEN);
-  outlen -= CIPHER_KEY_LEN;
-  tor_assert(tolen - outlen >= fromlen - pkeylen);
-  r = crypto_cipher_decrypt(cipher, to+outlen, from+pkeylen, fromlen-pkeylen);
-  if (r<0)
-    goto err;
-  memwipe(buf,0,pkeylen);
-  tor_free(buf);
-  crypto_cipher_free(cipher);
-  tor_assert(outlen + fromlen < INT_MAX);
-  return (int)(outlen + (fromlen-pkeylen));
- err:
-  memwipe(buf,0,pkeylen);
-  tor_free(buf);
-  crypto_cipher_free(cipher);
-  return -1;
-}
-
-/** Given a private or public key <b>pk</b>, put a SHA1 hash of the
- * public key into <b>digest_out</b> (must have DIGEST_LEN bytes of space).
- * Return 0 on success, -1 on failure.
- */
-int
-crypto_pk_get_digest(const crypto_pk_t *pk, char *digest_out)
-{
-  char *buf;
-  size_t buflen;
-  int len;
-  int rv = -1;
-
-  buflen = crypto_pk_keysize(pk)*2;
-  buf = tor_malloc(buflen);
-  len = crypto_pk_asn1_encode(pk, buf, buflen);
-  if (len < 0)
-    goto done;
-
-  if (crypto_digest(digest_out, buf, len) < 0)
-    goto done;
-
-  rv = 0;
-  done:
-  tor_free(buf);
-  return rv;
-}
-
-/** Compute all digests of the DER encoding of <b>pk</b>, and store them
- * in <b>digests_out</b>.  Return 0 on success, -1 on failure. */
-int
-crypto_pk_get_common_digests(crypto_pk_t *pk, common_digests_t *digests_out)
-{
-  char *buf;
-  size_t buflen;
-  int len;
-  int rv = -1;
-
-  buflen = crypto_pk_keysize(pk)*2;
-  buf = tor_malloc(buflen);
-  len = crypto_pk_asn1_encode(pk, buf, buflen);
-  if (len < 0)
-    goto done;
-
-  if (crypto_common_digests(digests_out, (char*)buf, len) < 0)
-    goto done;
-
-  rv = 0;
- done:
-  tor_free(buf);
-  return rv;
-}
-
 /** Copy <b>in</b> to the <b>outlen</b>-byte buffer <b>out</b>, adding spaces
  * every four characters. */
 void
@@ -788,524 +501,6 @@ crypto_cipher_decrypt_with_iv(const char
   return (int)(fromlen - CIPHER_IV_LEN);
 }
 
-/* SHA-1 */
-
-/** Compute the SHA1 digest of the <b>len</b> bytes on data stored in
- * <b>m</b>.  Write the DIGEST_LEN byte result into <b>digest</b>.
- * Return 0 on success, -1 on failure.
- */
-int
-crypto_digest(char *digest, const char *m, size_t len)
-{
-  tor_assert(m);
-  tor_assert(digest);
-  if (SHA1((const unsigned char*)m,len,(unsigned char*)digest) == NULL)
-    return -1;
-  return 0;
-}
-
-/** Compute a 256-bit digest of <b>len</b> bytes in data stored in <b>m</b>,
- * using the algorithm <b>algorithm</b>.  Write the DIGEST_LEN256-byte result
- * into <b>digest</b>.  Return 0 on success, -1 on failure. */
-int
-crypto_digest256(char *digest, const char *m, size_t len,
-                 digest_algorithm_t algorithm)
-{
-  tor_assert(m);
-  tor_assert(digest);
-  tor_assert(algorithm == DIGEST_SHA256 || algorithm == DIGEST_SHA3_256);
-
-  int ret = 0;
-  if (algorithm == DIGEST_SHA256)
-    ret = (SHA256((const uint8_t*)m,len,(uint8_t*)digest) != NULL);
-  else
-    ret = (sha3_256((uint8_t *)digest, DIGEST256_LEN,(const uint8_t *)m, len)
-           > -1);
-
-  if (!ret)
-    return -1;
-  return 0;
-}
-
-/** Compute a 512-bit digest of <b>len</b> bytes in data stored in <b>m</b>,
- * using the algorithm <b>algorithm</b>.  Write the DIGEST_LEN512-byte result
- * into <b>digest</b>.  Return 0 on success, -1 on failure. */
-int
-crypto_digest512(char *digest, const char *m, size_t len,
-                 digest_algorithm_t algorithm)
-{
-  tor_assert(m);
-  tor_assert(digest);
-  tor_assert(algorithm == DIGEST_SHA512 || algorithm == DIGEST_SHA3_512);
-
-  int ret = 0;
-  if (algorithm == DIGEST_SHA512)
-    ret = (SHA512((const unsigned char*)m,len,(unsigned char*)digest)
-           != NULL);
-  else
-    ret = (sha3_512((uint8_t*)digest, DIGEST512_LEN, (const uint8_t*)m, len)
-           > -1);
-
-  if (!ret)
-    return -1;
-  return 0;
-}
-
-/** Set the common_digests_t in <b>ds_out</b> to contain every digest on the
- * <b>len</b> bytes in <b>m</b> that we know how to compute.  Return 0 on
- * success, -1 on failure. */
-int
-crypto_common_digests(common_digests_t *ds_out, const char *m, size_t len)
-{
-  tor_assert(ds_out);
-  memset(ds_out, 0, sizeof(*ds_out));
-  if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0)
-    return -1;
-  if (crypto_digest256(ds_out->d[DIGEST_SHA256], m, len, DIGEST_SHA256) < 0)
-    return -1;
-
-  return 0;
-}
-
-/** Return the name of an algorithm, as used in directory documents. */
-const char *
-crypto_digest_algorithm_get_name(digest_algorithm_t alg)
-{
-  switch (alg) {
-    case DIGEST_SHA1:
-      return "sha1";
-    case DIGEST_SHA256:
-      return "sha256";
-    case DIGEST_SHA512:
-      return "sha512";
-    case DIGEST_SHA3_256:
-      return "sha3-256";
-    case DIGEST_SHA3_512:
-      return "sha3-512";
-      // LCOV_EXCL_START
-    default:
-      tor_fragile_assert();
-      return "??unknown_digest??";
-      // LCOV_EXCL_STOP
-  }
-}
-
-/** Given the name of a digest algorithm, return its integer value, or -1 if
- * the name is not recognized. */
-int
-crypto_digest_algorithm_parse_name(const char *name)
-{
-  if (!strcmp(name, "sha1"))
-    return DIGEST_SHA1;
-  else if (!strcmp(name, "sha256"))
-    return DIGEST_SHA256;
-  else if (!strcmp(name, "sha512"))
-    return DIGEST_SHA512;
-  else if (!strcmp(name, "sha3-256"))
-    return DIGEST_SHA3_256;
-  else if (!strcmp(name, "sha3-512"))
-    return DIGEST_SHA3_512;
-  else
-    return -1;
-}
-
-/** Given an algorithm, return the digest length in bytes. */
-size_t
-crypto_digest_algorithm_get_length(digest_algorithm_t alg)
-{
-  switch (alg) {
-    case DIGEST_SHA1:
-      return DIGEST_LEN;
-    case DIGEST_SHA256:
-      return DIGEST256_LEN;
-    case DIGEST_SHA512:
-      return DIGEST512_LEN;
-    case DIGEST_SHA3_256:
-      return DIGEST256_LEN;
-    case DIGEST_SHA3_512:
-      return DIGEST512_LEN;
-    default:
-      tor_assert(0);              // LCOV_EXCL_LINE
-      return 0; /* Unreachable */ // LCOV_EXCL_LINE
-  }
-}
-
-/** Intermediate information about the digest of a stream of data. */
-struct crypto_digest_t {
-  digest_algorithm_t algorithm; /**< Which algorithm is in use? */
-   /** State for the digest we're using.  Only one member of the
-    * union is usable, depending on the value of <b>algorithm</b>. Note also
-    * that space for other members might not even be allocated!
-    */
-  union {
-    SHA_CTX sha1; /**< state for SHA1 */
-    SHA256_CTX sha2; /**< state for SHA256 */
-    SHA512_CTX sha512; /**< state for SHA512 */
-    keccak_state sha3; /**< state for SHA3-[256,512] */
-  } d;
-};
-
-#ifdef TOR_UNIT_TESTS
-
-digest_algorithm_t
-crypto_digest_get_algorithm(crypto_digest_t *digest)
-{
-  tor_assert(digest);
-
-  return digest->algorithm;
-}
-
-#endif /* defined(TOR_UNIT_TESTS) */
-
-/**
- * Return the number of bytes we need to malloc in order to get a
- * crypto_digest_t for <b>alg</b>, or the number of bytes we need to wipe
- * when we free one.
- */
-static size_t
-crypto_digest_alloc_bytes(digest_algorithm_t alg)
-{
-  /* Helper: returns the number of bytes in the 'f' field of 'st' */
-#define STRUCT_FIELD_SIZE(st, f) (sizeof( ((st*)0)->f ))
-  /* Gives the length of crypto_digest_t through the end of the field 'd' */
-#define END_OF_FIELD(f) (offsetof(crypto_digest_t, f) + \
-                         STRUCT_FIELD_SIZE(crypto_digest_t, f))
-  switch (alg) {
-    case DIGEST_SHA1:
-      return END_OF_FIELD(d.sha1);
-    case DIGEST_SHA256:
-      return END_OF_FIELD(d.sha2);
-    case DIGEST_SHA512:
-      return END_OF_FIELD(d.sha512);
-    case DIGEST_SHA3_256:
-    case DIGEST_SHA3_512:
-      return END_OF_FIELD(d.sha3);
-    default:
-      tor_assert(0); // LCOV_EXCL_LINE
-      return 0;      // LCOV_EXCL_LINE
-  }
-#undef END_OF_FIELD
-#undef STRUCT_FIELD_SIZE
-}
-
-/**
- * Internal function: create and return a new digest object for 'algorithm'.
- * Does not typecheck the algorithm.
- */
-static crypto_digest_t *
-crypto_digest_new_internal(digest_algorithm_t algorithm)
-{
-  crypto_digest_t *r = tor_malloc(crypto_digest_alloc_bytes(algorithm));
-  r->algorithm = algorithm;
-
-  switch (algorithm)
-    {
-    case DIGEST_SHA1:
-      SHA1_Init(&r->d.sha1);
-      break;
-    case DIGEST_SHA256:
-      SHA256_Init(&r->d.sha2);
-      break;
-    case DIGEST_SHA512:
-      SHA512_Init(&r->d.sha512);
-      break;
-    case DIGEST_SHA3_256:
-      keccak_digest_init(&r->d.sha3, 256);
-      break;
-    case DIGEST_SHA3_512:
-      keccak_digest_init(&r->d.sha3, 512);
-      break;
-    default:
-      tor_assert_unreached();
-    }
-
-  return r;
-}
-
-/** Allocate and return a new digest object to compute SHA1 digests.
- */
-crypto_digest_t *
-crypto_digest_new(void)
-{
-  return crypto_digest_new_internal(DIGEST_SHA1);
-}
-
-/** Allocate and return a new digest object to compute 256-bit digests
- * using <b>algorithm</b>. */
-crypto_digest_t *
-crypto_digest256_new(digest_algorithm_t algorithm)
-{
-  tor_assert(algorithm == DIGEST_SHA256 || algorithm == DIGEST_SHA3_256);
-  return crypto_digest_new_internal(algorithm);
-}
-
-/** Allocate and return a new digest object to compute 512-bit digests
- * using <b>algorithm</b>. */
-crypto_digest_t *
-crypto_digest512_new(digest_algorithm_t algorithm)
-{
-  tor_assert(algorithm == DIGEST_SHA512 || algorithm == DIGEST_SHA3_512);
-  return crypto_digest_new_internal(algorithm);
-}
-
-/** Deallocate a digest object.
- */
-void
-crypto_digest_free_(crypto_digest_t *digest)
-{
-  if (!digest)
-    return;
-  size_t bytes = crypto_digest_alloc_bytes(digest->algorithm);
-  memwipe(digest, 0, bytes);
-  tor_free(digest);
-}
-
-/** Add <b>len</b> bytes from <b>data</b> to the digest object.
- */
-void
-crypto_digest_add_bytes(crypto_digest_t *digest, const char *data,
-                        size_t len)
-{
-  tor_assert(digest);
-  tor_assert(data);
-  /* Using the SHA*_*() calls directly means we don't support doing
-   * SHA in hardware. But so far the delay of getting the question
-   * to the hardware, and hearing the answer, is likely higher than
-   * just doing it ourselves. Hashes are fast.
-   */
-  switch (digest->algorithm) {
-    case DIGEST_SHA1:
-      SHA1_Update(&digest->d.sha1, (void*)data, len);
-      break;
-    case DIGEST_SHA256:
-      SHA256_Update(&digest->d.sha2, (void*)data, len);
-      break;
-    case DIGEST_SHA512:
-      SHA512_Update(&digest->d.sha512, (void*)data, len);
-      break;
-    case DIGEST_SHA3_256: /* FALLSTHROUGH */
-    case DIGEST_SHA3_512:
-      keccak_digest_update(&digest->d.sha3, (const uint8_t *)data, len);
-      break;
-    default:
-      /* LCOV_EXCL_START */
-      tor_fragile_assert();
-      break;
-      /* LCOV_EXCL_STOP */
-  }
-}
-
-/** Compute the hash of the data that has been passed to the digest
- * object; write the first out_len bytes of the result to <b>out</b>.
- * <b>out_len</b> must be \<= DIGEST512_LEN.
- */
-void
-crypto_digest_get_digest(crypto_digest_t *digest,
-                         char *out, size_t out_len)
-{
-  unsigned char r[DIGEST512_LEN];
-  crypto_digest_t tmpenv;
-  tor_assert(digest);
-  tor_assert(out);
-  tor_assert(out_len <= crypto_digest_algorithm_get_length(digest->algorithm));
-
-  /* The SHA-3 code handles copying into a temporary ctx, and also can handle
-   * short output buffers by truncating appropriately. */
-  if (digest->algorithm == DIGEST_SHA3_256 ||
-      digest->algorithm == DIGEST_SHA3_512) {
-    keccak_digest_sum(&digest->d.sha3, (uint8_t *)out, out_len);
-    return;
-  }
-
-  const size_t alloc_bytes = crypto_digest_alloc_bytes(digest->algorithm);
-  /* memcpy into a temporary ctx, since SHA*_Final clears the context */
-  memcpy(&tmpenv, digest, alloc_bytes);
-  switch (digest->algorithm) {
-    case DIGEST_SHA1:
-      SHA1_Final(r, &tmpenv.d.sha1);
-      break;
-    case DIGEST_SHA256:
-      SHA256_Final(r, &tmpenv.d.sha2);
-      break;
-    case DIGEST_SHA512:
-      SHA512_Final(r, &tmpenv.d.sha512);
-      break;
-//LCOV_EXCL_START
-    case DIGEST_SHA3_256: /* FALLSTHROUGH */
-    case DIGEST_SHA3_512:
-    default:
-      log_warn(LD_BUG, "Handling unexpected algorithm %d", digest->algorithm);
-      /* This is fatal, because it should never happen. */
-      tor_assert_unreached();
-      break;
-//LCOV_EXCL_STOP
-  }
-  memcpy(out, r, out_len);
-  memwipe(r, 0, sizeof(r));
-}
-
-/** Allocate and return a new digest object with the same state as
- * <b>digest</b>
- */
-crypto_digest_t *
-crypto_digest_dup(const crypto_digest_t *digest)
-{
-  tor_assert(digest);
-  const size_t alloc_bytes = crypto_digest_alloc_bytes(digest->algorithm);
-  return tor_memdup(digest, alloc_bytes);
-}
-
-/** Replace the state of the digest object <b>into</b> with the state
- * of the digest object <b>from</b>.  Requires that 'into' and 'from'
- * have the same digest type.
- */
-void
-crypto_digest_assign(crypto_digest_t *into,
-                     const crypto_digest_t *from)
-{
-  tor_assert(into);
-  tor_assert(from);
-  tor_assert(into->algorithm == from->algorithm);
-  const size_t alloc_bytes = crypto_digest_alloc_bytes(from->algorithm);
-  memcpy(into,from,alloc_bytes);
-}
-
-/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
- * at <b>digest_out</b> to the hash of the concatenation of those strings,
- * plus the optional string <b>append</b>, computed with the algorithm
- * <b>alg</b>.
- * <b>out_len</b> must be \<= DIGEST512_LEN. */
-void
-crypto_digest_smartlist(char *digest_out, size_t len_out,
-                        const smartlist_t *lst,
-                        const char *append,
-                        digest_algorithm_t alg)
-{
-  crypto_digest_smartlist_prefix(digest_out, len_out, NULL, lst, append, alg);
-}
-
-/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
- * at <b>digest_out</b> to the hash of the concatenation of: the
- * optional string <b>prepend</b>, those strings,
- * and the optional string <b>append</b>, computed with the algorithm
- * <b>alg</b>.
- * <b>len_out</b> must be \<= DIGEST512_LEN. */
-void
-crypto_digest_smartlist_prefix(char *digest_out, size_t len_out,
-                        const char *prepend,
-                        const smartlist_t *lst,
-                        const char *append,
-                        digest_algorithm_t alg)
-{
-  crypto_digest_t *d = crypto_digest_new_internal(alg);
-  if (prepend)
-    crypto_digest_add_bytes(d, prepend, strlen(prepend));
-  SMARTLIST_FOREACH(lst, const char *, cp,
-                    crypto_digest_add_bytes(d, cp, strlen(cp)));
-  if (append)
-    crypto_digest_add_bytes(d, append, strlen(append));
-  crypto_digest_get_digest(d, digest_out, len_out);
-  crypto_digest_free(d);
-}
-
-/** Compute the HMAC-SHA-256 of the <b>msg_len</b> bytes in <b>msg</b>, using
- * the <b>key</b> of length <b>key_len</b>.  Store the DIGEST256_LEN-byte
- * result in <b>hmac_out</b>. Asserts on failure.
- */
-void
-crypto_hmac_sha256(char *hmac_out,
-                   const char *key, size_t key_len,
-                   const char *msg, size_t msg_len)
-{
-  unsigned char *rv = NULL;
-  /* If we've got OpenSSL >=0.9.8 we can use its hmac implementation. */
-  tor_assert(key_len < INT_MAX);
-  tor_assert(msg_len < INT_MAX);
-  tor_assert(hmac_out);
-  rv = HMAC(EVP_sha256(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
-            (unsigned char*)hmac_out, NULL);
-  tor_assert(rv);
-}
-
-/** Compute a MAC using SHA3-256 of <b>msg_len</b> bytes in <b>msg</b> using a
- * <b>key</b> of length <b>key_len</b> and a <b>salt</b> of length
- * <b>salt_len</b>. Store the result of <b>len_out</b> bytes in in
- * <b>mac_out</b>. This function can't fail. */
-void
-crypto_mac_sha3_256(uint8_t *mac_out, size_t len_out,
-                    const uint8_t *key, size_t key_len,
-                    const uint8_t *msg, size_t msg_len)
-{
-  crypto_digest_t *digest;
-
-  const uint64_t key_len_netorder = tor_htonll(key_len);
-
-  tor_assert(mac_out);
-  tor_assert(key);
-  tor_assert(msg);
-
-  digest = crypto_digest256_new(DIGEST_SHA3_256);
-
-  /* Order matters here that is any subsystem using this function should
-   * expect this very precise ordering in the MAC construction. */
-  crypto_digest_add_bytes(digest, (const char *) &key_len_netorder,
-                          sizeof(key_len_netorder));
-  crypto_digest_add_bytes(digest, (const char *) key, key_len);
-  crypto_digest_add_bytes(digest, (const char *) msg, msg_len);
-  crypto_digest_get_digest(digest, (char *) mac_out, len_out);
-  crypto_digest_free(digest);
-}
-
-/** Internal state for a eXtendable-Output Function (XOF). */
-struct crypto_xof_t {
-  keccak_state s;
-};
-
-/** Allocate a new XOF object backed by SHAKE-256.  The security level
- * provided is a function of the length of the output used.  Read and
- * understand FIPS-202 A.2 "Additional Consideration for Extendable-Output
- * Functions" before using this construct.
- */
-crypto_xof_t *
-crypto_xof_new(void)
-{
-  crypto_xof_t *xof;
-  xof = tor_malloc(sizeof(crypto_xof_t));
-  keccak_xof_init(&xof->s, 256);
-  return xof;
-}
-
-/** Absorb bytes into a XOF object.  Must not be called after a call to
- * crypto_xof_squeeze_bytes() for the same instance, and will assert
- * if attempted.
- */
-void
-crypto_xof_add_bytes(crypto_xof_t *xof, const uint8_t *data, size_t len)
-{
-  int i = keccak_xof_absorb(&xof->s, data, len);
-  tor_assert(i == 0);
-}
-
-/** Squeeze bytes out of a XOF object.  Calling this routine will render
- * the XOF instance ineligible to absorb further data.
- */
-void
-crypto_xof_squeeze_bytes(crypto_xof_t *xof, uint8_t *out, size_t len)
-{
-  int i = keccak_xof_squeeze(&xof->s, out, len);
-  tor_assert(i == 0);
-}
-
-/** Cleanse and deallocate a XOF object. */
-void
-crypto_xof_free_(crypto_xof_t *xof)
-{
-  if (!xof)
-    return;
-  memwipe(xof, 0, sizeof(crypto_xof_t));
-  tor_free(xof);
-}
-
 /* DH */
 
 /** Our DH 'g' parameter */
@@ -1860,576 +1055,6 @@ crypto_dh_free_(crypto_dh_t *dh)
   tor_free(dh);
 }
 
-/* random numbers */
-
-/** How many bytes of entropy we add at once.
- *
- * This is how much entropy OpenSSL likes to add right now, so maybe it will
- * work for us too. */
-#define ADD_ENTROPY 32
-
-/** Set the seed of the weak RNG to a random value. */
-void
-crypto_seed_weak_rng(tor_weak_rng_t *rng)
-{
-  unsigned seed;
-  crypto_rand((void*)&seed, sizeof(seed));
-  tor_init_weak_random(rng, seed);
-}
-
-#ifdef TOR_UNIT_TESTS
-int break_strongest_rng_syscall = 0;
-int break_strongest_rng_fallback = 0;
-#endif
-
-/** Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
- * via system calls, storing it into <b>out</b>. Return 0 on success, -1 on
- * failure.  A maximum request size of 256 bytes is imposed.
- */
-static int
-crypto_strongest_rand_syscall(uint8_t *out, size_t out_len)
-{
-  tor_assert(out_len <= MAX_STRONGEST_RAND_SIZE);
-
-  /* We only log at notice-level here because in the case that this function
-   * fails the crypto_strongest_rand_raw() caller will log with a warning-level
-   * message and let crypto_strongest_rand() error out and finally terminating
-   * Tor with an assertion error.
-   */
-
-#ifdef TOR_UNIT_TESTS
-  if (break_strongest_rng_syscall)
-    return -1;
-#endif
-
-#if defined(_WIN32)
-  static int provider_set = 0;
-  static HCRYPTPROV provider;
-
-  if (!provider_set) {
-    if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
-                             CRYPT_VERIFYCONTEXT)) {
-      log_notice(LD_CRYPTO, "Unable to set Windows CryptoAPI provider [1].");
-      return -1;
-    }
-    provider_set = 1;
-  }
-  if (!CryptGenRandom(provider, out_len, out)) {
-    log_notice(LD_CRYPTO, "Unable get entropy from the Windows CryptoAPI.");
-    return -1;
-  }
-
-  return 0;
-#elif defined(__linux__) && defined(SYS_getrandom)
-  static int getrandom_works = 1; /* Be optimistic about our chances... */
-
-  /* getrandom() isn't as straightforward as getentropy(), and has
-   * no glibc wrapper.
-   *
-   * As far as I can tell from getrandom(2) and the source code, the
-   * requests we issue will always succeed (though it will block on the
-   * call if /dev/urandom isn't seeded yet), since we are NOT specifying
-   * GRND_NONBLOCK and the request is <= 256 bytes.
-   *
-   * The manpage is unclear on what happens if a signal interrupts the call
-   * while the request is blocked due to lack of entropy....
-   *
-   * We optimistically assume that getrandom() is available and functional
-   * because it is the way of the future, and 2 branch mispredicts pale in
-   * comparison to the overheads involved with failing to open
-   * /dev/srandom followed by opening and reading from /dev/urandom.
-   */
-  if (PREDICT_LIKELY(getrandom_works)) {
-    long ret;
-    /* A flag of '0' here means to read from '/dev/urandom', and to
-     * block if insufficient entropy is available to service the
-     * request.
-     */
-    const unsigned int flags = 0;
-    do {
-      ret = syscall(SYS_getrandom, out, out_len, flags);
-    } while (ret == -1 && ((errno == EINTR) ||(errno == EAGAIN)));
-
-    if (PREDICT_UNLIKELY(ret == -1)) {
-      /* LCOV_EXCL_START we can't actually make the syscall fail in testing. */
-      tor_assert(errno != EAGAIN);
-      tor_assert(errno != EINTR);
-
-      /* Useful log message for errno. */
-      if (errno == ENOSYS) {
-        log_notice(LD_CRYPTO, "Can't get entropy from getrandom()."
-                   " You are running a version of Tor built to support"
-                   " getrandom(), but the kernel doesn't implement this"
-                   " function--probably because it is too old?"
-                   " Trying fallback method instead.");
-      } else {
-        log_notice(LD_CRYPTO, "Can't get entropy from getrandom(): %s."
-                              " Trying fallback method instead.",
-                   strerror(errno));
-      }
-
-      getrandom_works = 0; /* Don't bother trying again. */
-      return -1;
-      /* LCOV_EXCL_STOP */
-    }
-
-    tor_assert(ret == (long)out_len);
-    return 0;
-  }
-
-  return -1; /* getrandom() previously failed unexpectedly. */
-#elif defined(HAVE_GETENTROPY)
-  /* getentropy() is what Linux's getrandom() wants to be when it grows up.
-   * the only gotcha is that requests are limited to 256 bytes.
-   */
-  return getentropy(out, out_len);
-#else
-  (void) out;
-#endif /* defined(_WIN32) || ... */
-
-  /* This platform doesn't have a supported syscall based random. */
-  return -1;
-}
-
-/** Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
- * via the per-platform fallback mechanism, storing it into <b>out</b>.
- * Return 0 on success, -1 on failure.  A maximum request size of 256 bytes
- * is imposed.
- */
-static int
-crypto_strongest_rand_fallback(uint8_t *out, size_t out_len)
-{
-#ifdef TOR_UNIT_TESTS
-  if (break_strongest_rng_fallback)
-    return -1;
-#endif
-
-#ifdef _WIN32
-  /* Windows exclusively uses crypto_strongest_rand_syscall(). */
-  (void)out;
-  (void)out_len;
-  return -1;
-#else /* !(defined(_WIN32)) */
-  static const char *filenames[] = {
-    "/dev/srandom", "/dev/urandom", "/dev/random", NULL
-  };
-  int fd, i;
-  size_t n;
-
-  for (i = 0; filenames[i]; ++i) {
-    log_debug(LD_FS, "Considering %s as entropy source", filenames[i]);
-    fd = open(sandbox_intern_string(filenames[i]), O_RDONLY, 0);
-    if (fd<0) continue;
-    log_info(LD_CRYPTO, "Reading entropy from \"%s\"", filenames[i]);
-    n = read_all(fd, (char*)out, out_len, 0);
-    close(fd);
-    if (n != out_len) {
-      /* LCOV_EXCL_START
-       * We can't make /dev/foorandom actually fail. */
-      log_notice(LD_CRYPTO,
-                 "Error reading from entropy source %s (read only %lu bytes).",
-                 filenames[i],
-                 (unsigned long)n);
-      return -1;
-      /* LCOV_EXCL_STOP */
-    }
-
-    return 0;
-  }
-
-  return -1;
-#endif /* defined(_WIN32) */
-}
-
-/** Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
- * storing it into <b>out</b>. Return 0 on success, -1 on failure.  A maximum
- * request size of 256 bytes is imposed.
- */
-STATIC int
-crypto_strongest_rand_raw(uint8_t *out, size_t out_len)
-{
-  static const size_t sanity_min_size = 16;
-  static const int max_attempts = 3;
-  tor_assert(out_len <= MAX_STRONGEST_RAND_SIZE);
-
-  /* For buffers >= 16 bytes (128 bits), we sanity check the output by
-   * zero filling the buffer and ensuring that it actually was at least
-   * partially modified.
-   *
-   * Checking that any individual byte is non-zero seems like it would
-   * fail too often (p = out_len * 1/256) for comfort, but this is an
-   * "adjust according to taste" sort of check.
-   */
-  memwipe(out, 0, out_len);
-  for (int i = 0; i < max_attempts; i++) {
-    /* Try to use the syscall/OS favored mechanism to get strong entropy. */
-    if (crypto_strongest_rand_syscall(out, out_len) != 0) {
-      /* Try to use the less-favored mechanism to get strong entropy. */
-      if (crypto_strongest_rand_fallback(out, out_len) != 0) {
-        /* Welp, we tried.  Hopefully the calling code terminates the process
-         * since we're basically boned without good entropy.
-         */
-        log_warn(LD_CRYPTO,
-                 "Cannot get strong entropy: no entropy source found.");
-        return -1;
-      }
-    }
-
-    if ((out_len < sanity_min_size) || !tor_mem_is_zero((char*)out, out_len))
-      return 0;
-  }
-
-  /* LCOV_EXCL_START
-   *
-   * We tried max_attempts times to fill a buffer >= 128 bits long,
-   * and each time it returned all '0's.  Either the system entropy
-   * source is busted, or the user should go out and buy a ticket to
-   * every lottery on the planet.
-   */
-  log_warn(LD_CRYPTO, "Strong OS entropy returned all zero buffer.");
-
-  return -1;
-  /* LCOV_EXCL_STOP */
-}
-
-/** Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
- * storing it into <b>out</b>.
- */
-void
-crypto_strongest_rand(uint8_t *out, size_t out_len)
-{
-#define DLEN SHA512_DIGEST_LENGTH
-  /* We're going to hash DLEN bytes from the system RNG together with some
-   * bytes from the openssl PRNG, in order to yield DLEN bytes.
-   */
-  uint8_t inp[DLEN*2];
-  uint8_t tmp[DLEN];
-  tor_assert(out);
-  while (out_len) {
-    crypto_rand((char*) inp, DLEN);
-    if (crypto_strongest_rand_raw(inp+DLEN, DLEN) < 0) {
-      // LCOV_EXCL_START
-      log_err(LD_CRYPTO, "Failed to load strong entropy when generating an "
-              "important key. Exiting.");
-      /* Die with an assertion so we get a stack trace. */
-      tor_assert(0);
-      // LCOV_EXCL_STOP
-    }
-    if (out_len >= DLEN) {
-      SHA512(inp, sizeof(inp), out);
-      out += DLEN;
-      out_len -= DLEN;
-    } else {
-      SHA512(inp, sizeof(inp), tmp);
-      memcpy(out, tmp, out_len);
-      break;
-    }
-  }
-  memwipe(tmp, 0, sizeof(tmp));
-  memwipe(inp, 0, sizeof(inp));
-#undef DLEN
-}
-
-/** Seed OpenSSL's random number generator with bytes from the operating
- * system.  Return 0 on success, -1 on failure.
- */
-int
-crypto_seed_rng(void)
-{
-  int rand_poll_ok = 0, load_entropy_ok = 0;
-  uint8_t buf[ADD_ENTROPY];
-
-  /* OpenSSL has a RAND_poll function that knows about more kinds of
-   * entropy than we do.  We'll try calling that, *and* calling our own entropy
-   * functions.  If one succeeds, we'll accept the RNG as seeded. */
-  rand_poll_ok = RAND_poll();
-  if (rand_poll_ok == 0)
-    log_warn(LD_CRYPTO, "RAND_poll() failed."); // LCOV_EXCL_LINE
-
-  load_entropy_ok = !crypto_strongest_rand_raw(buf, sizeof(buf));
-  if (load_entropy_ok) {
-    RAND_seed(buf, sizeof(buf));
-  }
-
-  memwipe(buf, 0, sizeof(buf));
-
-  if ((rand_poll_ok || load_entropy_ok) && RAND_status() == 1)
-    return 0;
-  else
-    return -1;
-}
-
-/** Write <b>n</b> bytes of strong random data to <b>to</b>. Supports mocking
- * for unit tests.
- *
- * This function is not allowed to fail; if it would fail to generate strong
- * entropy, it must terminate the process instead.
- */
-MOCK_IMPL(void,
-crypto_rand, (char *to, size_t n))
-{
-  crypto_rand_unmocked(to, n);
-}
-
-/** Write <b>n</b> bytes of strong random data to <b>to</b>.  Most callers
- * will want crypto_rand instead.
- *
- * This function is not allowed to fail; if it would fail to generate strong
- * entropy, it must terminate the process instead.
- */
-void
-crypto_rand_unmocked(char *to, size_t n)
-{
-  int r;
-  if (n == 0)
-    return;
-
-  tor_assert(n < INT_MAX);
-  tor_assert(to);
-  r = RAND_bytes((unsigned char*)to, (int)n);
-  /* We consider a PRNG failure non-survivable. Let's assert so that we get a
-   * stack trace about where it happened.
-   */
-  tor_assert(r >= 0);
-}
-
-/** Return a pseudorandom integer, chosen uniformly from the values
- * between 0 and <b>max</b>-1 inclusive.  <b>max</b> must be between 1 and
- * INT_MAX+1, inclusive. */
-int
-crypto_rand_int(unsigned int max)
-{
-  unsigned int val;
-  unsigned int cutoff;
-  tor_assert(max <= ((unsigned int)INT_MAX)+1);
-  tor_assert(max > 0); /* don't div by 0 */
-
-  /* We ignore any values that are >= 'cutoff,' to avoid biasing the
-   * distribution with clipping at the upper end of unsigned int's
-   * range.
-   */
-  cutoff = UINT_MAX - (UINT_MAX%max);
-  while (1) {
-    crypto_rand((char*)&val, sizeof(val));
-    if (val < cutoff)
-      return val % max;
-  }
-}
-
-/** Return a pseudorandom integer, chosen uniformly from the values i such
- * that min <= i < max.
- *
- * <b>min</b> MUST be in range [0, <b>max</b>).
- * <b>max</b> MUST be in range (min, INT_MAX].
- */
-int
-crypto_rand_int_range(unsigned int min, unsigned int max)
-{
-  tor_assert(min < max);
-  tor_assert(max <= INT_MAX);
-
-  /* The overflow is avoided here because crypto_rand_int() returns a value
-   * between 0 and (max - min) inclusive. */
-  return min + crypto_rand_int(max - min);
-}
-
-/** As crypto_rand_int_range, but supports uint64_t. */
-uint64_t
-crypto_rand_uint64_range(uint64_t min, uint64_t max)
-{
-  tor_assert(min < max);
-  return min + crypto_rand_uint64(max - min);
-}
-
-/** As crypto_rand_int_range, but supports time_t. */
-time_t
-crypto_rand_time_range(time_t min, time_t max)
-{
-  tor_assert(min < max);
-  return min + (time_t)crypto_rand_uint64(max - min);
-}
-
-/** Return a pseudorandom 64-bit integer, chosen uniformly from the values
- * between 0 and <b>max</b>-1 inclusive. */
-uint64_t
-crypto_rand_uint64(uint64_t max)
-{
-  uint64_t val;
-  uint64_t cutoff;
-  tor_assert(max < UINT64_MAX);
-  tor_assert(max > 0); /* don't div by 0 */
-
-  /* We ignore any values that are >= 'cutoff,' to avoid biasing the
-   * distribution with clipping at the upper end of unsigned int's
-   * range.
-   */
-  cutoff = UINT64_MAX - (UINT64_MAX%max);
-  while (1) {
-    crypto_rand((char*)&val, sizeof(val));
-    if (val < cutoff)
-      return val % max;
-  }
-}
-
-/** Return a pseudorandom double d, chosen uniformly from the range
- * 0.0 <= d < 1.0.
- */
-double
-crypto_rand_double(void)
-{
-  /* We just use an unsigned int here; we don't really care about getting
-   * more than 32 bits of resolution */
-  unsigned int u;
-  crypto_rand((char*)&u, sizeof(u));
-#if SIZEOF_INT == 4
-#define UINT_MAX_AS_DOUBLE 4294967296.0
-#elif SIZEOF_INT == 8
-#define UINT_MAX_AS_DOUBLE 1.8446744073709552e+19
-#else
-#error SIZEOF_INT is neither 4 nor 8
-#endif /* SIZEOF_INT == 4 || ... */
-  return ((double)u) / UINT_MAX_AS_DOUBLE;
-}
-
-/** Generate and return a new random hostname starting with <b>prefix</b>,
- * ending with <b>suffix</b>, and containing no fewer than
- * <b>min_rand_len</b> and no more than <b>max_rand_len</b> random base32
- * characters. Does not check for failure.
- *
- * Clip <b>max_rand_len</b> to MAX_DNS_LABEL_SIZE.
- **/
-char *
-crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix,
-                       const char *suffix)
-{
-  char *result, *rand_bytes;
-  int randlen, rand_bytes_len;
-  size_t resultlen, prefixlen;
-
-  if (max_rand_len > MAX_DNS_LABEL_SIZE)
-    max_rand_len = MAX_DNS_LABEL_SIZE;
-  if (min_rand_len > max_rand_len)
-    min_rand_len = max_rand_len;
-
-  randlen = crypto_rand_int_range(min_rand_len, max_rand_len+1);
-
-  prefixlen = strlen(prefix);
-  resultlen = prefixlen + strlen(suffix) + randlen + 16;
-
-  rand_bytes_len = ((randlen*5)+7)/8;
-  if (rand_bytes_len % 5)
-    rand_bytes_len += 5 - (rand_bytes_len%5);
-  rand_bytes = tor_malloc(rand_bytes_len);
-  crypto_rand(rand_bytes, rand_bytes_len);
-
-  result = tor_malloc(resultlen);
-  memcpy(result, prefix, prefixlen);
-  base32_encode(result+prefixlen, resultlen-prefixlen,
-                rand_bytes, rand_bytes_len);
-  tor_free(rand_bytes);
-  strlcpy(result+prefixlen+randlen, suffix, resultlen-(prefixlen+randlen));
-
-  return result;
-}
-
-/** Return a randomly chosen element of <b>sl</b>; or NULL if <b>sl</b>
- * is empty. */
-void *
-smartlist_choose(const smartlist_t *sl)
-{
-  int len = smartlist_len(sl);
-  if (len)
-    return smartlist_get(sl,crypto_rand_int(len));
-  return NULL; /* no elements to choose from */
-}
-
-/** Scramble the elements of <b>sl</b> into a random order. */
-void
-smartlist_shuffle(smartlist_t *sl)
-{
-  int i;
-  /* From the end of the list to the front, choose at random from the
-     positions we haven't looked at yet, and swap that position into the
-     current position.  Remember to give "no swap" the same probability as
-     any other swap. */
-  for (i = smartlist_len(sl)-1; i > 0; --i) {
-    int j = crypto_rand_int(i+1);
-    smartlist_swap(sl, i, j);
-  }
-}
-
-/**
- * Destroy the <b>sz</b> bytes of data stored at <b>mem</b>, setting them to
- * the value <b>byte</b>.
- * If <b>mem</b> is NULL or <b>sz</b> is zero, nothing happens.
- *
- * This function is preferable to memset, since many compilers will happily
- * optimize out memset() when they can convince themselves that the data being
- * cleared will never be read.
- *
- * Right now, our convention is to use this function when we are wiping data
- * that's about to become inaccessible, such as stack buffers that are about
- * to go out of scope or structures that are about to get freed.  (In
- * practice, it appears that the compilers we're currently using will optimize
- * out the memset()s for stack-allocated buffers, but not those for
- * about-to-be-freed structures. That could change, though, so we're being
- * wary.)  If there are live reads for the data, then you can just use
- * memset().
- */
-void
-memwipe(void *mem, uint8_t byte, size_t sz)
-{
-  if (sz == 0) {
-    return;
-  }
-  /* If sz is nonzero, then mem must not be NULL. */
-  tor_assert(mem != NULL);
-
-  /* Data this large is likely to be an underflow. */
-  tor_assert(sz < SIZE_T_CEILING);
-
-  /* Because whole-program-optimization exists, we may not be able to just
-   * have this function call "memset".  A smart compiler could inline it, then
-   * eliminate dead memsets, and declare itself to be clever. */
-
-#if defined(SecureZeroMemory) || defined(HAVE_SECUREZEROMEMORY)
-  /* Here's what you do on windows. */
-  SecureZeroMemory(mem,sz);
-#elif defined(HAVE_RTLSECUREZEROMEMORY)
-  RtlSecureZeroMemory(mem,sz);
-#elif defined(HAVE_EXPLICIT_BZERO)
-  /* The BSDs provide this. */
-  explicit_bzero(mem, sz);
-#elif defined(HAVE_MEMSET_S)
-  /* This is in the C99 standard. */
-  memset_s(mem, sz, 0, sz);
-#else
-  /* This is a slow and ugly function from OpenSSL that fills 'mem' with junk
-   * based on the pointer value, then uses that junk to update a global
-   * variable.  It's an elaborate ruse to trick the compiler into not
-   * optimizing out the "wipe this memory" code.  Read it if you like zany
-   * programming tricks! In later versions of Tor, we should look for better
-   * not-optimized-out memory wiping stuff...
-   *
-   * ...or maybe not.  In practice, there are pure-asm implementations of
-   * OPENSSL_cleanse() on most platforms, which ought to do the job.
-   **/
-
-  OPENSSL_cleanse(mem, sz);
-#endif /* defined(SecureZeroMemory) || defined(HAVE_SECUREZEROMEMORY) || ... */
-
-  /* Just in case some caller of memwipe() is relying on getting a buffer
-   * filled with a particular value, fill the buffer.
-   *
-   * If this function gets inlined, this memset might get eliminated, but
-   * that's okay: We only care about this particular memset in the case where
-   * the caller should have been using memset(), and the memset() wouldn't get
-   * eliminated.  In other words, this is here so that we won't break anything
-   * if somebody accidentally calls memwipe() instead of memset().
-   **/
-  memset(mem, byte, sz);
-}
-
 /** @{ */
 /** Uninitialize the crypto library. Return 0 on success. Does not detect
  * failure.
@@ -2437,11 +1062,15 @@ memwipe(void *mem, uint8_t byte, size_t
 int
 crypto_global_cleanup(void)
 {
+#ifndef OPENSSL_1_1_API
   EVP_cleanup();
+#endif
 #ifndef NEW_THREAD_API
   ERR_remove_thread_state(NULL);
 #endif
+#ifndef OPENSSL_1_1_API
   ERR_free_strings();
+#endif
 
   if (dh_param_p)
     BN_clear_free(dh_param_p);
@@ -2453,11 +1082,15 @@ crypto_global_cleanup(void)
   dh_param_p = dh_param_p_tls = dh_param_g = NULL;
 
 #ifndef DISABLE_ENGINES
+#ifndef OPENSSL_1_1_API
   ENGINE_cleanup();
 #endif
+#endif
 
   CONF_modules_unload(1);
+#ifndef OPENSSL_1_1_API
   CRYPTO_cleanup_all_ex_data();
+#endif
 
   crypto_openssl_free_all();
 
diff -pruN 0.3.3.9-1/src/common/crypto_curve25519.c 0.3.4.8-1/src/common/crypto_curve25519.c
--- 0.3.3.9-1/src/common/crypto_curve25519.c	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_curve25519.c	2018-06-15 21:20:53.000000000 +0000
@@ -21,9 +21,11 @@
 #include <sys/stat.h>
 #endif
 #include "container.h"
-#include "crypto.h"
 #include "crypto_curve25519.h"
+#include "crypto_digest.h"
 #include "crypto_format.h"
+#include "crypto_rand.h"
+#include "crypto_util.h"
 #include "util.h"
 #include "torlog.h"
 
diff -pruN 0.3.3.9-1/src/common/crypto_curve25519.h 0.3.4.8-1/src/common/crypto_curve25519.h
--- 0.3.3.9-1/src/common/crypto_curve25519.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_curve25519.h	2018-06-15 21:20:53.000000000 +0000
@@ -6,6 +6,7 @@
 
 #include "testsupport.h"
 #include "torint.h"
+#include "crypto_digest.h"
 #include "crypto_openssl_mgt.h"
 
 /** Length of a curve25519 public key when encoded. */
diff -pruN 0.3.3.9-1/src/common/crypto_digest.c 0.3.4.8-1/src/common/crypto_digest.c
--- 0.3.3.9-1/src/common/crypto_digest.c	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_digest.c	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,583 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file crypto_digest.c
+ * \brief Block of functions related with digest and xof utilities and
+ * operations.
+ **/
+
+#include "container.h"
+#include "crypto_digest.h"
+#include "crypto_openssl_mgt.h"
+#include "crypto_util.h"
+#include "torlog.h"
+
+#include "keccak-tiny/keccak-tiny.h"
+
+DISABLE_GCC_WARNING(redundant-decls)
+
+#include <openssl/hmac.h>
+#include <openssl/sha.h>
+
+ENABLE_GCC_WARNING(redundant-decls)
+
+/* Crypto digest functions */
+
+/** Compute the SHA1 digest of the <b>len</b> bytes on data stored in
+ * <b>m</b>.  Write the DIGEST_LEN byte result into <b>digest</b>.
+ * Return 0 on success, -1 on failure.
+ */
+int
+crypto_digest(char *digest, const char *m, size_t len)
+{
+  tor_assert(m);
+  tor_assert(digest);
+  if (SHA1((const unsigned char*)m,len,(unsigned char*)digest) == NULL)
+    return -1;
+  return 0;
+}
+
+/** Compute a 256-bit digest of <b>len</b> bytes in data stored in <b>m</b>,
+ * using the algorithm <b>algorithm</b>.  Write the DIGEST_LEN256-byte result
+ * into <b>digest</b>.  Return 0 on success, -1 on failure. */
+int
+crypto_digest256(char *digest, const char *m, size_t len,
+                 digest_algorithm_t algorithm)
+{
+  tor_assert(m);
+  tor_assert(digest);
+  tor_assert(algorithm == DIGEST_SHA256 || algorithm == DIGEST_SHA3_256);
+
+  int ret = 0;
+  if (algorithm == DIGEST_SHA256)
+    ret = (SHA256((const uint8_t*)m,len,(uint8_t*)digest) != NULL);
+  else
+    ret = (sha3_256((uint8_t *)digest, DIGEST256_LEN,(const uint8_t *)m, len)
+           > -1);
+
+  if (!ret)
+    return -1;
+  return 0;
+}
+
+/** Compute a 512-bit digest of <b>len</b> bytes in data stored in <b>m</b>,
+ * using the algorithm <b>algorithm</b>.  Write the DIGEST_LEN512-byte result
+ * into <b>digest</b>.  Return 0 on success, -1 on failure. */
+int
+crypto_digest512(char *digest, const char *m, size_t len,
+                 digest_algorithm_t algorithm)
+{
+  tor_assert(m);
+  tor_assert(digest);
+  tor_assert(algorithm == DIGEST_SHA512 || algorithm == DIGEST_SHA3_512);
+
+  int ret = 0;
+  if (algorithm == DIGEST_SHA512)
+    ret = (SHA512((const unsigned char*)m,len,(unsigned char*)digest)
+           != NULL);
+  else
+    ret = (sha3_512((uint8_t*)digest, DIGEST512_LEN, (const uint8_t*)m, len)
+           > -1);
+
+  if (!ret)
+    return -1;
+  return 0;
+}
+
+/** Set the common_digests_t in <b>ds_out</b> to contain every digest on the
+ * <b>len</b> bytes in <b>m</b> that we know how to compute.  Return 0 on
+ * success, -1 on failure. */
+int
+crypto_common_digests(common_digests_t *ds_out, const char *m, size_t len)
+{
+  tor_assert(ds_out);
+  memset(ds_out, 0, sizeof(*ds_out));
+  if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0)
+    return -1;
+  if (crypto_digest256(ds_out->d[DIGEST_SHA256], m, len, DIGEST_SHA256) < 0)
+    return -1;
+
+  return 0;
+}
+
+/** Return the name of an algorithm, as used in directory documents. */
+const char *
+crypto_digest_algorithm_get_name(digest_algorithm_t alg)
+{
+  switch (alg) {
+    case DIGEST_SHA1:
+      return "sha1";
+    case DIGEST_SHA256:
+      return "sha256";
+    case DIGEST_SHA512:
+      return "sha512";
+    case DIGEST_SHA3_256:
+      return "sha3-256";
+    case DIGEST_SHA3_512:
+      return "sha3-512";
+      // LCOV_EXCL_START
+    default:
+      tor_fragile_assert();
+      return "??unknown_digest??";
+      // LCOV_EXCL_STOP
+  }
+}
+
+/** Given the name of a digest algorithm, return its integer value, or -1 if
+ * the name is not recognized. */
+int
+crypto_digest_algorithm_parse_name(const char *name)
+{
+  if (!strcmp(name, "sha1"))
+    return DIGEST_SHA1;
+  else if (!strcmp(name, "sha256"))
+    return DIGEST_SHA256;
+  else if (!strcmp(name, "sha512"))
+    return DIGEST_SHA512;
+  else if (!strcmp(name, "sha3-256"))
+    return DIGEST_SHA3_256;
+  else if (!strcmp(name, "sha3-512"))
+    return DIGEST_SHA3_512;
+  else
+    return -1;
+}
+
+/** Given an algorithm, return the digest length in bytes. */
+size_t
+crypto_digest_algorithm_get_length(digest_algorithm_t alg)
+{
+  switch (alg) {
+    case DIGEST_SHA1:
+      return DIGEST_LEN;
+    case DIGEST_SHA256:
+      return DIGEST256_LEN;
+    case DIGEST_SHA512:
+      return DIGEST512_LEN;
+    case DIGEST_SHA3_256:
+      return DIGEST256_LEN;
+    case DIGEST_SHA3_512:
+      return DIGEST512_LEN;
+    default:
+      tor_assert(0);              // LCOV_EXCL_LINE
+      return 0; /* Unreachable */ // LCOV_EXCL_LINE
+  }
+}
+
+/** Intermediate information about the digest of a stream of data. */
+struct crypto_digest_t {
+  digest_algorithm_t algorithm; /**< Which algorithm is in use? */
+   /** State for the digest we're using.  Only one member of the
+    * union is usable, depending on the value of <b>algorithm</b>. Note also
+    * that space for other members might not even be allocated!
+    */
+  union {
+    SHA_CTX sha1; /**< state for SHA1 */
+    SHA256_CTX sha2; /**< state for SHA256 */
+    SHA512_CTX sha512; /**< state for SHA512 */
+    keccak_state sha3; /**< state for SHA3-[256,512] */
+  } d;
+};
+
+#ifdef TOR_UNIT_TESTS
+
+digest_algorithm_t
+crypto_digest_get_algorithm(crypto_digest_t *digest)
+{
+  tor_assert(digest);
+
+  return digest->algorithm;
+}
+
+#endif /* defined(TOR_UNIT_TESTS) */
+
+/**
+ * Return the number of bytes we need to malloc in order to get a
+ * crypto_digest_t for <b>alg</b>, or the number of bytes we need to wipe
+ * when we free one.
+ */
+static size_t
+crypto_digest_alloc_bytes(digest_algorithm_t alg)
+{
+  /* Helper: returns the number of bytes in the 'f' field of 'st' */
+#define STRUCT_FIELD_SIZE(st, f) (sizeof( ((st*)0)->f ))
+  /* Gives the length of crypto_digest_t through the end of the field 'd' */
+#define END_OF_FIELD(f) (offsetof(crypto_digest_t, f) + \
+                         STRUCT_FIELD_SIZE(crypto_digest_t, f))
+  switch (alg) {
+    case DIGEST_SHA1:
+      return END_OF_FIELD(d.sha1);
+    case DIGEST_SHA256:
+      return END_OF_FIELD(d.sha2);
+    case DIGEST_SHA512:
+      return END_OF_FIELD(d.sha512);
+    case DIGEST_SHA3_256:
+    case DIGEST_SHA3_512:
+      return END_OF_FIELD(d.sha3);
+    default:
+      tor_assert(0); // LCOV_EXCL_LINE
+      return 0;      // LCOV_EXCL_LINE
+  }
+#undef END_OF_FIELD
+#undef STRUCT_FIELD_SIZE
+}
+
+/**
+ * Internal function: create and return a new digest object for 'algorithm'.
+ * Does not typecheck the algorithm.
+ */
+static crypto_digest_t *
+crypto_digest_new_internal(digest_algorithm_t algorithm)
+{
+  crypto_digest_t *r = tor_malloc(crypto_digest_alloc_bytes(algorithm));
+  r->algorithm = algorithm;
+
+  switch (algorithm)
+    {
+    case DIGEST_SHA1:
+      SHA1_Init(&r->d.sha1);
+      break;
+    case DIGEST_SHA256:
+      SHA256_Init(&r->d.sha2);
+      break;
+    case DIGEST_SHA512:
+      SHA512_Init(&r->d.sha512);
+      break;
+    case DIGEST_SHA3_256:
+      keccak_digest_init(&r->d.sha3, 256);
+      break;
+    case DIGEST_SHA3_512:
+      keccak_digest_init(&r->d.sha3, 512);
+      break;
+    default:
+      tor_assert_unreached();
+    }
+
+  return r;
+}
+
+/** Allocate and return a new digest object to compute SHA1 digests.
+ */
+crypto_digest_t *
+crypto_digest_new(void)
+{
+  return crypto_digest_new_internal(DIGEST_SHA1);
+}
+
+/** Allocate and return a new digest object to compute 256-bit digests
+ * using <b>algorithm</b>.
+ *
+ * C_RUST_COUPLED: `external::crypto_digest::crypto_digest256_new`
+ * C_RUST_COUPLED: `crypto::digest::Sha256::default`
+ */
+crypto_digest_t *
+crypto_digest256_new(digest_algorithm_t algorithm)
+{
+  tor_assert(algorithm == DIGEST_SHA256 || algorithm == DIGEST_SHA3_256);
+  return crypto_digest_new_internal(algorithm);
+}
+
+/** Allocate and return a new digest object to compute 512-bit digests
+ * using <b>algorithm</b>. */
+crypto_digest_t *
+crypto_digest512_new(digest_algorithm_t algorithm)
+{
+  tor_assert(algorithm == DIGEST_SHA512 || algorithm == DIGEST_SHA3_512);
+  return crypto_digest_new_internal(algorithm);
+}
+
+/** Deallocate a digest object.
+ */
+void
+crypto_digest_free_(crypto_digest_t *digest)
+{
+  if (!digest)
+    return;
+  size_t bytes = crypto_digest_alloc_bytes(digest->algorithm);
+  memwipe(digest, 0, bytes);
+  tor_free(digest);
+}
+
+/** Add <b>len</b> bytes from <b>data</b> to the digest object.
+ *
+ * C_RUST_COUPLED: `external::crypto_digest::crypto_digest_add_bytess`
+ * C_RUST_COUPLED: `crypto::digest::Sha256::process`
+ */
+void
+crypto_digest_add_bytes(crypto_digest_t *digest, const char *data,
+                        size_t len)
+{
+  tor_assert(digest);
+  tor_assert(data);
+  /* Using the SHA*_*() calls directly means we don't support doing
+   * SHA in hardware. But so far the delay of getting the question
+   * to the hardware, and hearing the answer, is likely higher than
+   * just doing it ourselves. Hashes are fast.
+   */
+  switch (digest->algorithm) {
+    case DIGEST_SHA1:
+      SHA1_Update(&digest->d.sha1, (void*)data, len);
+      break;
+    case DIGEST_SHA256:
+      SHA256_Update(&digest->d.sha2, (void*)data, len);
+      break;
+    case DIGEST_SHA512:
+      SHA512_Update(&digest->d.sha512, (void*)data, len);
+      break;
+    case DIGEST_SHA3_256: /* FALLSTHROUGH */
+    case DIGEST_SHA3_512:
+      keccak_digest_update(&digest->d.sha3, (const uint8_t *)data, len);
+      break;
+    default:
+      /* LCOV_EXCL_START */
+      tor_fragile_assert();
+      break;
+      /* LCOV_EXCL_STOP */
+  }
+}
+
+/** Compute the hash of the data that has been passed to the digest
+ * object; write the first out_len bytes of the result to <b>out</b>.
+ * <b>out_len</b> must be \<= DIGEST512_LEN.
+ *
+ * C_RUST_COUPLED: `external::crypto_digest::crypto_digest_get_digest`
+ * C_RUST_COUPLED: `impl digest::FixedOutput for Sha256`
+ */
+void
+crypto_digest_get_digest(crypto_digest_t *digest,
+                         char *out, size_t out_len)
+{
+  unsigned char r[DIGEST512_LEN];
+  crypto_digest_t tmpenv;
+  tor_assert(digest);
+  tor_assert(out);
+  tor_assert(out_len <= crypto_digest_algorithm_get_length(digest->algorithm));
+
+  /* The SHA-3 code handles copying into a temporary ctx, and also can handle
+   * short output buffers by truncating appropriately. */
+  if (digest->algorithm == DIGEST_SHA3_256 ||
+      digest->algorithm == DIGEST_SHA3_512) {
+    keccak_digest_sum(&digest->d.sha3, (uint8_t *)out, out_len);
+    return;
+  }
+
+  const size_t alloc_bytes = crypto_digest_alloc_bytes(digest->algorithm);
+  /* memcpy into a temporary ctx, since SHA*_Final clears the context */
+  memcpy(&tmpenv, digest, alloc_bytes);
+  switch (digest->algorithm) {
+    case DIGEST_SHA1:
+      SHA1_Final(r, &tmpenv.d.sha1);
+      break;
+    case DIGEST_SHA256:
+      SHA256_Final(r, &tmpenv.d.sha2);
+      break;
+    case DIGEST_SHA512:
+      SHA512_Final(r, &tmpenv.d.sha512);
+      break;
+//LCOV_EXCL_START
+    case DIGEST_SHA3_256: /* FALLSTHROUGH */
+    case DIGEST_SHA3_512:
+    default:
+      log_warn(LD_BUG, "Handling unexpected algorithm %d", digest->algorithm);
+      /* This is fatal, because it should never happen. */
+      tor_assert_unreached();
+      break;
+//LCOV_EXCL_STOP
+  }
+  memcpy(out, r, out_len);
+  memwipe(r, 0, sizeof(r));
+}
+
+/** Allocate and return a new digest object with the same state as
+ * <b>digest</b>
+ *
+ * C_RUST_COUPLED: `external::crypto_digest::crypto_digest_dup`
+ * C_RUST_COUPLED: `impl Clone for crypto::digest::Sha256`
+ */
+crypto_digest_t *
+crypto_digest_dup(const crypto_digest_t *digest)
+{
+  tor_assert(digest);
+  const size_t alloc_bytes = crypto_digest_alloc_bytes(digest->algorithm);
+  return tor_memdup(digest, alloc_bytes);
+}
+
+/** Temporarily save the state of <b>digest</b> in <b>checkpoint</b>.
+ * Asserts that <b>digest</b> is a SHA1 digest object.
+ */
+void
+crypto_digest_checkpoint(crypto_digest_checkpoint_t *checkpoint,
+                         const crypto_digest_t *digest)
+{
+  const size_t bytes = crypto_digest_alloc_bytes(digest->algorithm);
+  tor_assert(bytes <= sizeof(checkpoint->mem));
+  memcpy(checkpoint->mem, digest, bytes);
+}
+
+/** Restore the state of  <b>digest</b> from <b>checkpoint</b>.
+ * Asserts that <b>digest</b> is a SHA1 digest object. Requires that the
+ * state was previously stored with crypto_digest_checkpoint() */
+void
+crypto_digest_restore(crypto_digest_t *digest,
+                      const crypto_digest_checkpoint_t *checkpoint)
+{
+  const size_t bytes = crypto_digest_alloc_bytes(digest->algorithm);
+  memcpy(digest, checkpoint->mem, bytes);
+}
+
+/** Replace the state of the digest object <b>into</b> with the state
+ * of the digest object <b>from</b>.  Requires that 'into' and 'from'
+ * have the same digest type.
+ */
+void
+crypto_digest_assign(crypto_digest_t *into,
+                     const crypto_digest_t *from)
+{
+  tor_assert(into);
+  tor_assert(from);
+  tor_assert(into->algorithm == from->algorithm);
+  const size_t alloc_bytes = crypto_digest_alloc_bytes(from->algorithm);
+  memcpy(into,from,alloc_bytes);
+}
+
+/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
+ * at <b>digest_out</b> to the hash of the concatenation of those strings,
+ * plus the optional string <b>append</b>, computed with the algorithm
+ * <b>alg</b>.
+ * <b>out_len</b> must be \<= DIGEST512_LEN. */
+void
+crypto_digest_smartlist(char *digest_out, size_t len_out,
+                        const smartlist_t *lst,
+                        const char *append,
+                        digest_algorithm_t alg)
+{
+  crypto_digest_smartlist_prefix(digest_out, len_out, NULL, lst, append, alg);
+}
+
+/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
+ * at <b>digest_out</b> to the hash of the concatenation of: the
+ * optional string <b>prepend</b>, those strings,
+ * and the optional string <b>append</b>, computed with the algorithm
+ * <b>alg</b>.
+ * <b>len_out</b> must be \<= DIGEST512_LEN. */
+void
+crypto_digest_smartlist_prefix(char *digest_out, size_t len_out,
+                        const char *prepend,
+                        const smartlist_t *lst,
+                        const char *append,
+                        digest_algorithm_t alg)
+{
+  crypto_digest_t *d = crypto_digest_new_internal(alg);
+  if (prepend)
+    crypto_digest_add_bytes(d, prepend, strlen(prepend));
+  SMARTLIST_FOREACH(lst, const char *, cp,
+                    crypto_digest_add_bytes(d, cp, strlen(cp)));
+  if (append)
+    crypto_digest_add_bytes(d, append, strlen(append));
+  crypto_digest_get_digest(d, digest_out, len_out);
+  crypto_digest_free(d);
+}
+
+/** Compute the HMAC-SHA-256 of the <b>msg_len</b> bytes in <b>msg</b>, using
+ * the <b>key</b> of length <b>key_len</b>.  Store the DIGEST256_LEN-byte
+ * result in <b>hmac_out</b>. Asserts on failure.
+ */
+void
+crypto_hmac_sha256(char *hmac_out,
+                   const char *key, size_t key_len,
+                   const char *msg, size_t msg_len)
+{
+  unsigned char *rv = NULL;
+  /* If we've got OpenSSL >=0.9.8 we can use its hmac implementation. */
+  tor_assert(key_len < INT_MAX);
+  tor_assert(msg_len < INT_MAX);
+  tor_assert(hmac_out);
+  rv = HMAC(EVP_sha256(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
+            (unsigned char*)hmac_out, NULL);
+  tor_assert(rv);
+}
+
+/** Compute a MAC using SHA3-256 of <b>msg_len</b> bytes in <b>msg</b> using a
+ * <b>key</b> of length <b>key_len</b> and a <b>salt</b> of length
+ * <b>salt_len</b>. Store the result of <b>len_out</b> bytes in in
+ * <b>mac_out</b>. This function can't fail. */
+void
+crypto_mac_sha3_256(uint8_t *mac_out, size_t len_out,
+                    const uint8_t *key, size_t key_len,
+                    const uint8_t *msg, size_t msg_len)
+{
+  crypto_digest_t *digest;
+
+  const uint64_t key_len_netorder = tor_htonll(key_len);
+
+  tor_assert(mac_out);
+  tor_assert(key);
+  tor_assert(msg);
+
+  digest = crypto_digest256_new(DIGEST_SHA3_256);
+
+  /* Order matters here that is any subsystem using this function should
+   * expect this very precise ordering in the MAC construction. */
+  crypto_digest_add_bytes(digest, (const char *) &key_len_netorder,
+                          sizeof(key_len_netorder));
+  crypto_digest_add_bytes(digest, (const char *) key, key_len);
+  crypto_digest_add_bytes(digest, (const char *) msg, msg_len);
+  crypto_digest_get_digest(digest, (char *) mac_out, len_out);
+  crypto_digest_free(digest);
+}
+
+/* xof functions  */
+
+/** Internal state for a eXtendable-Output Function (XOF). */
+struct crypto_xof_t {
+  keccak_state s;
+};
+
+/** Allocate a new XOF object backed by SHAKE-256.  The security level
+ * provided is a function of the length of the output used.  Read and
+ * understand FIPS-202 A.2 "Additional Consideration for Extendable-Output
+ * Functions" before using this construct.
+ */
+crypto_xof_t *
+crypto_xof_new(void)
+{
+  crypto_xof_t *xof;
+  xof = tor_malloc(sizeof(crypto_xof_t));
+  keccak_xof_init(&xof->s, 256);
+  return xof;
+}
+
+/** Absorb bytes into a XOF object.  Must not be called after a call to
+ * crypto_xof_squeeze_bytes() for the same instance, and will assert
+ * if attempted.
+ */
+void
+crypto_xof_add_bytes(crypto_xof_t *xof, const uint8_t *data, size_t len)
+{
+  int i = keccak_xof_absorb(&xof->s, data, len);
+  tor_assert(i == 0);
+}
+
+/** Squeeze bytes out of a XOF object.  Calling this routine will render
+ * the XOF instance ineligible to absorb further data.
+ */
+void
+crypto_xof_squeeze_bytes(crypto_xof_t *xof, uint8_t *out, size_t len)
+{
+  int i = keccak_xof_squeeze(&xof->s, out, len);
+  tor_assert(i == 0);
+}
+
+/** Cleanse and deallocate a XOF object. */
+void
+crypto_xof_free_(crypto_xof_t *xof)
+{
+  if (!xof)
+    return;
+  memwipe(xof, 0, sizeof(crypto_xof_t));
+  tor_free(xof);
+}
+
diff -pruN 0.3.3.9-1/src/common/crypto_digest.h 0.3.4.8-1/src/common/crypto_digest.h
--- 0.3.3.9-1/src/common/crypto_digest.h	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_digest.h	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,136 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file crypto_digest.h
+ *
+ * \brief Headers for crypto_digest.c
+ **/
+
+#ifndef TOR_CRYPTO_DIGEST_H
+#define TOR_CRYPTO_DIGEST_H
+
+#include <stdio.h>
+
+#include "container.h"
+#include "torint.h"
+
+/** Length of the output of our message digest. */
+#define DIGEST_LEN 20
+/** Length of the output of our second (improved) message digests.  (For now
+ * this is just sha256, but it could be any other 256-bit digest.) */
+#define DIGEST256_LEN 32
+/** Length of the output of our 64-bit optimized message digests (SHA512). */
+#define DIGEST512_LEN 64
+
+/** Length of a sha1 message digest when encoded in base32 with trailing =
+ * signs removed. */
+#define BASE32_DIGEST_LEN 32
+/** Length of a sha1 message digest when encoded in base64 with trailing =
+ * signs removed. */
+#define BASE64_DIGEST_LEN 27
+/** Length of a sha256 message digest when encoded in base64 with trailing =
+ * signs removed. */
+#define BASE64_DIGEST256_LEN 43
+/** Length of a sha512 message digest when encoded in base64 with trailing =
+ * signs removed. */
+#define BASE64_DIGEST512_LEN 86
+
+/** Length of hex encoding of SHA1 digest, not including final NUL. */
+#define HEX_DIGEST_LEN 40
+/** Length of hex encoding of SHA256 digest, not including final NUL. */
+#define HEX_DIGEST256_LEN 64
+/** Length of hex encoding of SHA512 digest, not including final NUL. */
+#define HEX_DIGEST512_LEN 128
+
+typedef enum {
+  DIGEST_SHA1 = 0,
+  DIGEST_SHA256 = 1,
+  DIGEST_SHA512 = 2,
+  DIGEST_SHA3_256 = 3,
+  DIGEST_SHA3_512 = 4,
+} digest_algorithm_t;
+#define  N_DIGEST_ALGORITHMS (DIGEST_SHA3_512+1)
+#define  N_COMMON_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
+
+#define DIGEST_CHECKPOINT_BYTES (SIZEOF_VOID_P + 512)
+/** Structure used to temporarily save the a digest object. Only implemented
+ * for SHA1 digest for now. */
+typedef struct crypto_digest_checkpoint_t {
+  uint8_t mem[DIGEST_CHECKPOINT_BYTES];
+} crypto_digest_checkpoint_t;
+
+/** A set of all the digests we commonly compute, taken on a single
+ * string.  Any digests that are shorter than 512 bits are right-padded
+ * with 0 bits.
+ *
+ * Note that this representation wastes 44 bytes for the SHA1 case, so
+ * don't use it for anything where we need to allocate a whole bunch at
+ * once.
+ **/
+typedef struct {
+  char d[N_COMMON_DIGEST_ALGORITHMS][DIGEST256_LEN];
+} common_digests_t;
+
+typedef struct crypto_digest_t crypto_digest_t;
+typedef struct crypto_xof_t crypto_xof_t;
+
+/* SHA-1 and other digests */
+int crypto_digest(char *digest, const char *m, size_t len);
+int crypto_digest256(char *digest, const char *m, size_t len,
+                     digest_algorithm_t algorithm);
+int crypto_digest512(char *digest, const char *m, size_t len,
+                     digest_algorithm_t algorithm);
+int crypto_common_digests(common_digests_t *ds_out, const char *m, size_t len);
+void crypto_digest_smartlist_prefix(char *digest_out, size_t len_out,
+                                    const char *prepend,
+                                    const struct smartlist_t *lst,
+                                    const char *append,
+                                    digest_algorithm_t alg);
+void crypto_digest_smartlist(char *digest_out, size_t len_out,
+                             const struct smartlist_t *lst, const char *append,
+                             digest_algorithm_t alg);
+const char *crypto_digest_algorithm_get_name(digest_algorithm_t alg);
+size_t crypto_digest_algorithm_get_length(digest_algorithm_t alg);
+int crypto_digest_algorithm_parse_name(const char *name);
+crypto_digest_t *crypto_digest_new(void);
+crypto_digest_t *crypto_digest256_new(digest_algorithm_t algorithm);
+crypto_digest_t *crypto_digest512_new(digest_algorithm_t algorithm);
+void crypto_digest_free_(crypto_digest_t *digest);
+#define crypto_digest_free(d) \
+  FREE_AND_NULL(crypto_digest_t, crypto_digest_free_, (d))
+void crypto_digest_add_bytes(crypto_digest_t *digest, const char *data,
+                             size_t len);
+void crypto_digest_get_digest(crypto_digest_t *digest,
+                              char *out, size_t out_len);
+crypto_digest_t *crypto_digest_dup(const crypto_digest_t *digest);
+void crypto_digest_checkpoint(crypto_digest_checkpoint_t *checkpoint,
+                              const crypto_digest_t *digest);
+void crypto_digest_restore(crypto_digest_t *digest,
+                           const crypto_digest_checkpoint_t *checkpoint);
+void crypto_digest_assign(crypto_digest_t *into,
+                          const crypto_digest_t *from);
+void crypto_hmac_sha256(char *hmac_out,
+                        const char *key, size_t key_len,
+                        const char *msg, size_t msg_len);
+void crypto_mac_sha3_256(uint8_t *mac_out, size_t len_out,
+                         const uint8_t *key, size_t key_len,
+                         const uint8_t *msg, size_t msg_len);
+
+/* xof functions*/
+crypto_xof_t *crypto_xof_new(void);
+void crypto_xof_add_bytes(crypto_xof_t *xof, const uint8_t *data, size_t len);
+void crypto_xof_squeeze_bytes(crypto_xof_t *xof, uint8_t *out, size_t len);
+void crypto_xof_free_(crypto_xof_t *xof);
+#define crypto_xof_free(xof) \
+  FREE_AND_NULL(crypto_xof_t, crypto_xof_free_, (xof))
+
+#ifdef TOR_UNIT_TESTS
+digest_algorithm_t crypto_digest_get_algorithm(crypto_digest_t *digest);
+#endif
+
+#endif /* !defined(TOR_CRYPTO_DIGEST_H) */
+
diff -pruN 0.3.3.9-1/src/common/crypto_ed25519.c 0.3.4.8-1/src/common/crypto_ed25519.c
--- 0.3.3.9-1/src/common/crypto_ed25519.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_ed25519.c	2018-06-15 21:20:53.000000000 +0000
@@ -21,11 +21,12 @@
 #include <sys/stat.h>
 #endif
 
-#include "crypto.h"
-
 #include "crypto_curve25519.h"
+#include "crypto_digest.h"
 #include "crypto_ed25519.h"
 #include "crypto_format.h"
+#include "crypto_rand.h"
+#include "crypto_util.h"
 #include "torlog.h"
 #include "util.h"
 #include "util_format.h"
diff -pruN 0.3.3.9-1/src/common/crypto_format.c 0.3.4.8-1/src/common/crypto_format.c
--- 0.3.3.9-1/src/common/crypto_format.c	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_format.c	2018-06-15 21:20:53.000000000 +0000
@@ -15,10 +15,11 @@
 #include <sys/stat.h>
 #endif
 #include "container.h"
-#include "crypto.h"
 #include "crypto_curve25519.h"
+#include "crypto_digest.h"
 #include "crypto_ed25519.h"
 #include "crypto_format.h"
+#include "crypto_util.h"
 #include "util.h"
 #include "util_format.h"
 #include "torlog.h"
diff -pruN 0.3.3.9-1/src/common/crypto.h 0.3.4.8-1/src/common/crypto.h
--- 0.3.3.9-1/src/common/crypto.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto.h	2018-06-15 21:20:53.000000000 +0000
@@ -17,20 +17,10 @@
 
 #include <stdio.h>
 #include "torint.h"
-#include "testsupport.h"
 #include "compat.h"
 #include "util.h"
 #include "crypto_rsa.h"
 
-#include "keccak-tiny/keccak-tiny.h"
-
-/** Length of the output of our message digest. */
-#define DIGEST_LEN 20
-/** Length of the output of our second (improved) message digests.  (For now
- * this is just sha256, but it could be any other 256-bit digest.) */
-#define DIGEST256_LEN 32
-/** Length of the output of our 64-bit optimized message digests (SHA512). */
-#define DIGEST512_LEN 64
 /** Length of our symmetric cipher's keys of 128-bit. */
 #define CIPHER_KEY_LEN 16
 /** Length of our symmetric cipher's IV of 128-bit. */
@@ -40,57 +30,15 @@
 /** Length of our DH keys. */
 #define DH_BYTES (1024/8)
 
-/** Length of a sha1 message digest when encoded in base32 with trailing =
- * signs removed. */
-#define BASE32_DIGEST_LEN 32
-/** Length of a sha1 message digest when encoded in base64 with trailing =
- * signs removed. */
-#define BASE64_DIGEST_LEN 27
-/** Length of a sha256 message digest when encoded in base64 with trailing =
- * signs removed. */
-#define BASE64_DIGEST256_LEN 43
-/** Length of a sha512 message digest when encoded in base64 with trailing =
- * signs removed. */
-#define BASE64_DIGEST512_LEN 86
-
 /** Length of encoded public key fingerprints, including space; but not
  * including terminating NUL. */
 #define FINGERPRINT_LEN 49
-/** Length of hex encoding of SHA1 digest, not including final NUL. */
-#define HEX_DIGEST_LEN 40
-/** Length of hex encoding of SHA256 digest, not including final NUL. */
-#define HEX_DIGEST256_LEN 64
-/** Length of hex encoding of SHA512 digest, not including final NUL. */
-#define HEX_DIGEST512_LEN 128
-
-typedef enum {
-  DIGEST_SHA1 = 0,
-  DIGEST_SHA256 = 1,
-  DIGEST_SHA512 = 2,
-  DIGEST_SHA3_256 = 3,
-  DIGEST_SHA3_512 = 4,
-} digest_algorithm_t;
-#define  N_DIGEST_ALGORITHMS (DIGEST_SHA3_512+1)
-#define  N_COMMON_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
-
-/** A set of all the digests we commonly compute, taken on a single
- * string.  Any digests that are shorter than 512 bits are right-padded
- * with 0 bits.
- *
- * Note that this representation wastes 44 bytes for the SHA1 case, so
- * don't use it for anything where we need to allocate a whole bunch at
- * once.
- **/
-typedef struct {
-  char d[N_COMMON_DIGEST_ALGORITHMS][DIGEST256_LEN];
-} common_digests_t;
 
 typedef struct aes_cnt_cipher crypto_cipher_t;
-typedef struct crypto_digest_t crypto_digest_t;
-typedef struct crypto_xof_t crypto_xof_t;
 typedef struct crypto_dh_t crypto_dh_t;
 
 /* global state */
+int crypto_init_siphash_key(void);
 int crypto_early_init(void) ATTR_WUR;
 int crypto_global_init(int hardwareAccel,
                        const char *accelName,
@@ -114,24 +62,6 @@ void crypto_cipher_free_(crypto_cipher_t
 #define crypto_cipher_free(c) \
   FREE_AND_NULL(crypto_cipher_t, crypto_cipher_free_, (c))
 
-/* public key crypto  */
-MOCK_DECL(int, crypto_pk_public_checksig_digest,(crypto_pk_t *env,
-                                         const char *data, size_t datalen,
-                                         const char *sig, size_t siglen));
-int crypto_pk_private_sign_digest(crypto_pk_t *env, char *to, size_t tolen,
-                                  const char *from, size_t fromlen);
-int crypto_pk_obsolete_public_hybrid_encrypt(crypto_pk_t *env, char *to,
-                                    size_t tolen,
-                                    const char *from, size_t fromlen,
-                                    int padding, int force);
-int crypto_pk_obsolete_private_hybrid_decrypt(crypto_pk_t *env, char *to,
-                                     size_t tolen,
-                                     const char *from, size_t fromlen,
-                                     int padding, int warnOnFailure);
-int crypto_pk_get_digest(const crypto_pk_t *pk, char *digest_out);
-int crypto_pk_get_common_digests(crypto_pk_t *pk,
-                                 common_digests_t *digests_out);
-
 /* symmetric crypto */
 const char *crypto_cipher_get_key(crypto_cipher_t *env);
 
@@ -148,52 +78,6 @@ int crypto_cipher_decrypt_with_iv(const
                                   char *to, size_t tolen,
                                   const char *from, size_t fromlen);
 
-/* SHA-1 and other digests. */
-int crypto_digest(char *digest, const char *m, size_t len);
-int crypto_digest256(char *digest, const char *m, size_t len,
-                     digest_algorithm_t algorithm);
-int crypto_digest512(char *digest, const char *m, size_t len,
-                     digest_algorithm_t algorithm);
-int crypto_common_digests(common_digests_t *ds_out, const char *m, size_t len);
-struct smartlist_t;
-void crypto_digest_smartlist_prefix(char *digest_out, size_t len_out,
-                                    const char *prepend,
-                                    const struct smartlist_t *lst,
-                                    const char *append,
-                                    digest_algorithm_t alg);
-void crypto_digest_smartlist(char *digest_out, size_t len_out,
-                             const struct smartlist_t *lst, const char *append,
-                             digest_algorithm_t alg);
-const char *crypto_digest_algorithm_get_name(digest_algorithm_t alg);
-size_t crypto_digest_algorithm_get_length(digest_algorithm_t alg);
-int crypto_digest_algorithm_parse_name(const char *name);
-crypto_digest_t *crypto_digest_new(void);
-crypto_digest_t *crypto_digest256_new(digest_algorithm_t algorithm);
-crypto_digest_t *crypto_digest512_new(digest_algorithm_t algorithm);
-void crypto_digest_free_(crypto_digest_t *digest);
-#define crypto_digest_free(d) \
-  FREE_AND_NULL(crypto_digest_t, crypto_digest_free_, (d))
-void crypto_digest_add_bytes(crypto_digest_t *digest, const char *data,
-                             size_t len);
-void crypto_digest_get_digest(crypto_digest_t *digest,
-                              char *out, size_t out_len);
-crypto_digest_t *crypto_digest_dup(const crypto_digest_t *digest);
-void crypto_digest_assign(crypto_digest_t *into,
-                          const crypto_digest_t *from);
-void crypto_hmac_sha256(char *hmac_out,
-                        const char *key, size_t key_len,
-                        const char *msg, size_t msg_len);
-void crypto_mac_sha3_256(uint8_t *mac_out, size_t len_out,
-                         const uint8_t *key, size_t key_len,
-                         const uint8_t *msg, size_t msg_len);
-
-crypto_xof_t *crypto_xof_new(void);
-void crypto_xof_add_bytes(crypto_xof_t *xof, const uint8_t *data, size_t len);
-void crypto_xof_squeeze_bytes(crypto_xof_t *xof, uint8_t *out, size_t len);
-void crypto_xof_free_(crypto_xof_t *xof);
-#define crypto_xof_free(xof) \
-  FREE_AND_NULL(crypto_xof_t, crypto_xof_free_, (xof))
-
 /* Key negotiation */
 #define DH_TYPE_CIRCUIT 1
 #define DH_TYPE_REND 2
@@ -219,31 +103,6 @@ int crypto_expand_key_material_rfc5869_s
                                     const uint8_t *info_in, size_t info_in_len,
                                     uint8_t *key_out, size_t key_out_len);
 
-/* random numbers */
-int crypto_seed_rng(void) ATTR_WUR;
-MOCK_DECL(void,crypto_rand,(char *to, size_t n));
-void crypto_rand_unmocked(char *to, size_t n);
-void crypto_strongest_rand(uint8_t *out, size_t out_len);
-int crypto_rand_int(unsigned int max);
-int crypto_rand_int_range(unsigned int min, unsigned int max);
-uint64_t crypto_rand_uint64_range(uint64_t min, uint64_t max);
-time_t crypto_rand_time_range(time_t min, time_t max);
-uint64_t crypto_rand_uint64(uint64_t max);
-double crypto_rand_double(void);
-struct tor_weak_rng_t;
-void crypto_seed_weak_rng(struct tor_weak_rng_t *rng);
-int crypto_init_siphash_key(void);
-
-char *crypto_random_hostname(int min_rand_len, int max_rand_len,
-                             const char *prefix, const char *suffix);
-
-struct smartlist_t;
-void *smartlist_choose(const struct smartlist_t *sl);
-void smartlist_shuffle(struct smartlist_t *sl);
-
-/** OpenSSL-based utility functions. */
-void memwipe(void *mem, uint8_t byte, size_t sz);
-
 /* Prototypes for private functions only used by tortls.c, crypto.c, and the
  * unit tests. */
 struct dh_st;
@@ -251,20 +110,5 @@ struct dh_st *crypto_dh_get_dh_(crypto_d
 
 void crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in);
 
-#ifdef CRYPTO_PRIVATE
-
-STATIC int crypto_force_rand_ssleay(void);
-STATIC int crypto_strongest_rand_raw(uint8_t *out, size_t out_len);
-
-#ifdef TOR_UNIT_TESTS
-extern int break_strongest_rng_syscall;
-extern int break_strongest_rng_fallback;
-#endif
-#endif /* defined(CRYPTO_PRIVATE) */
-
-#ifdef TOR_UNIT_TESTS
-digest_algorithm_t crypto_digest_get_algorithm(crypto_digest_t *digest);
-#endif
-
 #endif /* !defined(TOR_CRYPTO_H) */
 
diff -pruN 0.3.3.9-1/src/common/crypto_pwbox.c 0.3.4.8-1/src/common/crypto_pwbox.c
--- 0.3.3.9-1/src/common/crypto_pwbox.c	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_pwbox.c	2018-06-15 21:20:53.000000000 +0000
@@ -9,8 +9,11 @@
  */
 
 #include "crypto.h"
-#include "crypto_s2k.h"
+#include "crypto_digest.h"
 #include "crypto_pwbox.h"
+#include "crypto_rand.h"
+#include "crypto_s2k.h"
+#include "crypto_util.h"
 #include "di_ops.h"
 #include "util.h"
 #include "pwbox.h"
diff -pruN 0.3.3.9-1/src/common/crypto_rand.c 0.3.4.8-1/src/common/crypto_rand.c
--- 0.3.3.9-1/src/common/crypto_rand.c	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_rand.c	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,615 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file crypto_rand.c
+ *
+ * \brief Functions for initialising and seeding (pseudo-)random
+ * number generators, and working with randomness.
+ **/
+
+#ifndef CRYPTO_RAND_PRIVATE
+#define CRYPTO_RAND_PRIVATE
+
+#include "crypto_rand.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#include <wincrypt.h>
+#endif /* defined(_WIN32) */
+
+#include "container.h"
+#include "compat.h"
+#include "compat_openssl.h"
+#include "crypto_util.h"
+#include "sandbox.h"
+#include "testsupport.h"
+#include "torlog.h"
+#include "util.h"
+#include "util_format.h"
+
+DISABLE_GCC_WARNING(redundant-decls)
+#include <openssl/rand.h>
+ENABLE_GCC_WARNING(redundant-decls)
+
+#if __GNUC__ && GCC_VERSION >= 402
+#if GCC_VERSION >= 406
+#pragma GCC diagnostic pop
+#else
+#pragma GCC diagnostic warning "-Wredundant-decls"
+#endif
+#endif /* __GNUC__ && GCC_VERSION >= 402 */
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_SYS_FCNTL_H
+#include <sys/fcntl.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SYSCALL_H
+#include <sys/syscall.h>
+#endif
+#ifdef HAVE_SYS_RANDOM_H
+#include <sys/random.h>
+#endif
+
+/**
+ * How many bytes of entropy we add at once.
+ *
+ * This is how much entropy OpenSSL likes to add right now, so maybe it will
+ * work for us too.
+ **/
+#define ADD_ENTROPY 32
+
+/**
+ * Longest recognized DNS query.
+ **/
+#define MAX_DNS_LABEL_SIZE 63
+
+/**
+ * Largest strong entropy request permitted.
+ **/
+#define MAX_STRONGEST_RAND_SIZE 256
+
+/**
+ * Set the seed of the weak RNG to a random value.
+ **/
+void
+crypto_seed_weak_rng(tor_weak_rng_t *rng)
+{
+  unsigned seed;
+  crypto_rand((void*)&seed, sizeof(seed));
+  tor_init_weak_random(rng, seed);
+}
+
+#ifdef TOR_UNIT_TESTS
+int break_strongest_rng_syscall = 0;
+int break_strongest_rng_fallback = 0;
+#endif
+
+/**
+ * Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
+ * via system calls, storing it into <b>out</b>. Return 0 on success, -1 on
+ * failure.  A maximum request size of 256 bytes is imposed.
+ **/
+static int
+crypto_strongest_rand_syscall(uint8_t *out, size_t out_len)
+{
+  tor_assert(out_len <= MAX_STRONGEST_RAND_SIZE);
+
+  /* We only log at notice-level here because in the case that this function
+   * fails the crypto_strongest_rand_raw() caller will log with a warning-level
+   * message and let crypto_strongest_rand() error out and finally terminating
+   * Tor with an assertion error.
+   */
+
+#ifdef TOR_UNIT_TESTS
+  if (break_strongest_rng_syscall)
+    return -1;
+#endif
+
+#if defined(_WIN32)
+  static int provider_set = 0;
+  static HCRYPTPROV provider;
+
+  if (!provider_set) {
+    if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
+                             CRYPT_VERIFYCONTEXT)) {
+      log_notice(LD_CRYPTO, "Unable to set Windows CryptoAPI provider [1].");
+      return -1;
+    }
+    provider_set = 1;
+  }
+  if (!CryptGenRandom(provider, out_len, out)) {
+    log_notice(LD_CRYPTO, "Unable get entropy from the Windows CryptoAPI.");
+    return -1;
+  }
+
+  return 0;
+#elif defined(__linux__) && defined(SYS_getrandom)
+  static int getrandom_works = 1; /* Be optimistic about our chances... */
+
+  /* getrandom() isn't as straightforward as getentropy(), and has
+   * no glibc wrapper.
+   *
+   * As far as I can tell from getrandom(2) and the source code, the
+   * requests we issue will always succeed (though it will block on the
+   * call if /dev/urandom isn't seeded yet), since we are NOT specifying
+   * GRND_NONBLOCK and the request is <= 256 bytes.
+   *
+   * The manpage is unclear on what happens if a signal interrupts the call
+   * while the request is blocked due to lack of entropy....
+   *
+   * We optimistically assume that getrandom() is available and functional
+   * because it is the way of the future, and 2 branch mispredicts pale in
+   * comparison to the overheads involved with failing to open
+   * /dev/srandom followed by opening and reading from /dev/urandom.
+   */
+  if (PREDICT_LIKELY(getrandom_works)) {
+    long ret;
+    /* A flag of '0' here means to read from '/dev/urandom', and to
+     * block if insufficient entropy is available to service the
+     * request.
+     */
+    const unsigned int flags = 0;
+    do {
+      ret = syscall(SYS_getrandom, out, out_len, flags);
+    } while (ret == -1 && ((errno == EINTR) ||(errno == EAGAIN)));
+
+    if (PREDICT_UNLIKELY(ret == -1)) {
+      /* LCOV_EXCL_START we can't actually make the syscall fail in testing. */
+      tor_assert(errno != EAGAIN);
+      tor_assert(errno != EINTR);
+
+      /* Useful log message for errno. */
+      if (errno == ENOSYS) {
+        log_notice(LD_CRYPTO, "Can't get entropy from getrandom()."
+                   " You are running a version of Tor built to support"
+                   " getrandom(), but the kernel doesn't implement this"
+                   " function--probably because it is too old?"
+                   " Trying fallback method instead.");
+      } else {
+        log_notice(LD_CRYPTO, "Can't get entropy from getrandom(): %s."
+                              " Trying fallback method instead.",
+                   strerror(errno));
+      }
+
+      getrandom_works = 0; /* Don't bother trying again. */
+      return -1;
+      /* LCOV_EXCL_STOP */
+    }
+
+    tor_assert(ret == (long)out_len);
+    return 0;
+  }
+
+  return -1; /* getrandom() previously failed unexpectedly. */
+#elif defined(HAVE_GETENTROPY)
+  /* getentropy() is what Linux's getrandom() wants to be when it grows up.
+   * the only gotcha is that requests are limited to 256 bytes.
+   */
+  return getentropy(out, out_len);
+#else
+  (void) out;
+#endif /* defined(_WIN32) || ... */
+
+  /* This platform doesn't have a supported syscall based random. */
+  return -1;
+}
+
+/**
+ * Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
+ * via the per-platform fallback mechanism, storing it into <b>out</b>.
+ * Return 0 on success, -1 on failure.  A maximum request size of 256 bytes
+ * is imposed.
+ **/
+static int
+crypto_strongest_rand_fallback(uint8_t *out, size_t out_len)
+{
+#ifdef TOR_UNIT_TESTS
+  if (break_strongest_rng_fallback)
+    return -1;
+#endif
+
+#ifdef _WIN32
+  /* Windows exclusively uses crypto_strongest_rand_syscall(). */
+  (void)out;
+  (void)out_len;
+  return -1;
+#else /* !(defined(_WIN32)) */
+  static const char *filenames[] = {
+    "/dev/srandom", "/dev/urandom", "/dev/random", NULL
+  };
+  int fd, i;
+  size_t n;
+
+  for (i = 0; filenames[i]; ++i) {
+    log_debug(LD_FS, "Considering %s as entropy source", filenames[i]);
+    fd = open(sandbox_intern_string(filenames[i]), O_RDONLY, 0);
+    if (fd<0) continue;
+    log_info(LD_CRYPTO, "Reading entropy from \"%s\"", filenames[i]);
+    n = read_all(fd, (char*)out, out_len, 0);
+    close(fd);
+    if (n != out_len) {
+      /* LCOV_EXCL_START
+       * We can't make /dev/foorandom actually fail. */
+      log_notice(LD_CRYPTO,
+                 "Error reading from entropy source %s (read only %lu bytes).",
+                 filenames[i],
+                 (unsigned long)n);
+      return -1;
+      /* LCOV_EXCL_STOP */
+    }
+
+    return 0;
+  }
+
+  return -1;
+#endif /* defined(_WIN32) */
+}
+
+/**
+ * Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
+ * storing it into <b>out</b>. Return 0 on success, -1 on failure.  A maximum
+ * request size of 256 bytes is imposed.
+ **/
+STATIC int
+crypto_strongest_rand_raw(uint8_t *out, size_t out_len)
+{
+  static const size_t sanity_min_size = 16;
+  static const int max_attempts = 3;
+  tor_assert(out_len <= MAX_STRONGEST_RAND_SIZE);
+
+  /* For buffers >= 16 bytes (128 bits), we sanity check the output by
+   * zero filling the buffer and ensuring that it actually was at least
+   * partially modified.
+   *
+   * Checking that any individual byte is non-zero seems like it would
+   * fail too often (p = out_len * 1/256) for comfort, but this is an
+   * "adjust according to taste" sort of check.
+   */
+  memwipe(out, 0, out_len);
+  for (int i = 0; i < max_attempts; i++) {
+    /* Try to use the syscall/OS favored mechanism to get strong entropy. */
+    if (crypto_strongest_rand_syscall(out, out_len) != 0) {
+      /* Try to use the less-favored mechanism to get strong entropy. */
+      if (crypto_strongest_rand_fallback(out, out_len) != 0) {
+        /* Welp, we tried.  Hopefully the calling code terminates the process
+         * since we're basically boned without good entropy.
+         */
+        log_warn(LD_CRYPTO,
+                 "Cannot get strong entropy: no entropy source found.");
+        return -1;
+      }
+    }
+
+    if ((out_len < sanity_min_size) || !tor_mem_is_zero((char*)out, out_len))
+      return 0;
+  }
+
+  /* LCOV_EXCL_START
+   *
+   * We tried max_attempts times to fill a buffer >= 128 bits long,
+   * and each time it returned all '0's.  Either the system entropy
+   * source is busted, or the user should go out and buy a ticket to
+   * every lottery on the planet.
+   */
+  log_warn(LD_CRYPTO, "Strong OS entropy returned all zero buffer.");
+
+  return -1;
+  /* LCOV_EXCL_STOP */
+}
+
+/**
+ * Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
+ * storing it into <b>out</b>.
+ **/
+void
+crypto_strongest_rand(uint8_t *out, size_t out_len)
+{
+#define DLEN SHA512_DIGEST_LENGTH
+  /* We're going to hash DLEN bytes from the system RNG together with some
+   * bytes from the openssl PRNG, in order to yield DLEN bytes.
+   */
+  uint8_t inp[DLEN*2];
+  uint8_t tmp[DLEN];
+  tor_assert(out);
+  while (out_len) {
+    crypto_rand((char*) inp, DLEN);
+    if (crypto_strongest_rand_raw(inp+DLEN, DLEN) < 0) {
+      // LCOV_EXCL_START
+      log_err(LD_CRYPTO, "Failed to load strong entropy when generating an "
+              "important key. Exiting.");
+      /* Die with an assertion so we get a stack trace. */
+      tor_assert(0);
+      // LCOV_EXCL_STOP
+    }
+    if (out_len >= DLEN) {
+      SHA512(inp, sizeof(inp), out);
+      out += DLEN;
+      out_len -= DLEN;
+    } else {
+      SHA512(inp, sizeof(inp), tmp);
+      memcpy(out, tmp, out_len);
+      break;
+    }
+  }
+  memwipe(tmp, 0, sizeof(tmp));
+  memwipe(inp, 0, sizeof(inp));
+#undef DLEN
+}
+
+/**
+ * Seed OpenSSL's random number generator with bytes from the operating
+ * system.  Return 0 on success, -1 on failure.
+ **/
+int
+crypto_seed_rng(void)
+{
+  int rand_poll_ok = 0, load_entropy_ok = 0;
+  uint8_t buf[ADD_ENTROPY];
+
+  /* OpenSSL has a RAND_poll function that knows about more kinds of
+   * entropy than we do.  We'll try calling that, *and* calling our own entropy
+   * functions.  If one succeeds, we'll accept the RNG as seeded. */
+  rand_poll_ok = RAND_poll();
+  if (rand_poll_ok == 0)
+    log_warn(LD_CRYPTO, "RAND_poll() failed."); // LCOV_EXCL_LINE
+
+  load_entropy_ok = !crypto_strongest_rand_raw(buf, sizeof(buf));
+  if (load_entropy_ok) {
+    RAND_seed(buf, sizeof(buf));
+  }
+
+  memwipe(buf, 0, sizeof(buf));
+
+  if ((rand_poll_ok || load_entropy_ok) && RAND_status() == 1)
+    return 0;
+  else
+    return -1;
+}
+
+/**
+ * Write <b>n</b> bytes of strong random data to <b>to</b>. Supports mocking
+ * for unit tests.
+ *
+ * This function is not allowed to fail; if it would fail to generate strong
+ * entropy, it must terminate the process instead.
+ **/
+MOCK_IMPL(void,
+crypto_rand, (char *to, size_t n))
+{
+  crypto_rand_unmocked(to, n);
+}
+
+/**
+ * Write <b>n</b> bytes of strong random data to <b>to</b>.  Most callers
+ * will want crypto_rand instead.
+ *
+ * This function is not allowed to fail; if it would fail to generate strong
+ * entropy, it must terminate the process instead.
+ **/
+void
+crypto_rand_unmocked(char *to, size_t n)
+{
+  int r;
+  if (n == 0)
+    return;
+
+  tor_assert(n < INT_MAX);
+  tor_assert(to);
+  r = RAND_bytes((unsigned char*)to, (int)n);
+  /* We consider a PRNG failure non-survivable. Let's assert so that we get a
+   * stack trace about where it happened.
+   */
+  tor_assert(r >= 0);
+}
+
+/**
+ * Return a pseudorandom integer, chosen uniformly from the values
+ * between 0 and <b>max</b>-1 inclusive.  <b>max</b> must be between 1 and
+ * INT_MAX+1, inclusive.
+ */
+int
+crypto_rand_int(unsigned int max)
+{
+  unsigned int val;
+  unsigned int cutoff;
+  tor_assert(max <= ((unsigned int)INT_MAX)+1);
+  tor_assert(max > 0); /* don't div by 0 */
+
+  /* We ignore any values that are >= 'cutoff,' to avoid biasing the
+   * distribution with clipping at the upper end of unsigned int's
+   * range.
+   */
+  cutoff = UINT_MAX - (UINT_MAX%max);
+  while (1) {
+    crypto_rand((char*)&val, sizeof(val));
+    if (val < cutoff)
+      return val % max;
+  }
+}
+
+/**
+ * Return a pseudorandom integer, chosen uniformly from the values i such
+ * that min <= i < max.
+ *
+ * <b>min</b> MUST be in range [0, <b>max</b>).
+ * <b>max</b> MUST be in range (min, INT_MAX].
+ **/
+int
+crypto_rand_int_range(unsigned int min, unsigned int max)
+{
+  tor_assert(min < max);
+  tor_assert(max <= INT_MAX);
+
+  /* The overflow is avoided here because crypto_rand_int() returns a value
+   * between 0 and (max - min) inclusive. */
+  return min + crypto_rand_int(max - min);
+}
+
+/**
+ * As crypto_rand_int_range, but supports uint64_t.
+ **/
+uint64_t
+crypto_rand_uint64_range(uint64_t min, uint64_t max)
+{
+  tor_assert(min < max);
+  return min + crypto_rand_uint64(max - min);
+}
+
+/**
+ * As crypto_rand_int_range, but supports time_t.
+ **/
+time_t
+crypto_rand_time_range(time_t min, time_t max)
+{
+  tor_assert(min < max);
+  return min + (time_t)crypto_rand_uint64(max - min);
+}
+
+/**
+ * Return a pseudorandom 64-bit integer, chosen uniformly from the values
+ * between 0 and <b>max</b>-1 inclusive.
+ **/
+uint64_t
+crypto_rand_uint64(uint64_t max)
+{
+  uint64_t val;
+  uint64_t cutoff;
+  tor_assert(max < UINT64_MAX);
+  tor_assert(max > 0); /* don't div by 0 */
+
+  /* We ignore any values that are >= 'cutoff,' to avoid biasing the
+   * distribution with clipping at the upper end of unsigned int's
+   * range.
+   */
+  cutoff = UINT64_MAX - (UINT64_MAX%max);
+  while (1) {
+    crypto_rand((char*)&val, sizeof(val));
+    if (val < cutoff)
+      return val % max;
+  }
+}
+
+/**
+ * Return a pseudorandom double d, chosen uniformly from the range
+ * 0.0 <= d < 1.0.
+ **/
+double
+crypto_rand_double(void)
+{
+  /* We just use an unsigned int here; we don't really care about getting
+   * more than 32 bits of resolution */
+  unsigned int u;
+  crypto_rand((char*)&u, sizeof(u));
+#if SIZEOF_INT == 4
+#define UINT_MAX_AS_DOUBLE 4294967296.0
+#elif SIZEOF_INT == 8
+#define UINT_MAX_AS_DOUBLE 1.8446744073709552e+19
+#else
+#error SIZEOF_INT is neither 4 nor 8
+#endif /* SIZEOF_INT == 4 || ... */
+  return ((double)u) / UINT_MAX_AS_DOUBLE;
+}
+
+/**
+ * Generate and return a new random hostname starting with <b>prefix</b>,
+ * ending with <b>suffix</b>, and containing no fewer than
+ * <b>min_rand_len</b> and no more than <b>max_rand_len</b> random base32
+ * characters. Does not check for failure.
+ *
+ * Clip <b>max_rand_len</b> to MAX_DNS_LABEL_SIZE.
+ **/
+char *
+crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix,
+                       const char *suffix)
+{
+  char *result, *rand_bytes;
+  int randlen, rand_bytes_len;
+  size_t resultlen, prefixlen;
+
+  if (max_rand_len > MAX_DNS_LABEL_SIZE)
+    max_rand_len = MAX_DNS_LABEL_SIZE;
+  if (min_rand_len > max_rand_len)
+    min_rand_len = max_rand_len;
+
+  randlen = crypto_rand_int_range(min_rand_len, max_rand_len+1);
+
+  prefixlen = strlen(prefix);
+  resultlen = prefixlen + strlen(suffix) + randlen + 16;
+
+  rand_bytes_len = ((randlen*5)+7)/8;
+  if (rand_bytes_len % 5)
+    rand_bytes_len += 5 - (rand_bytes_len%5);
+  rand_bytes = tor_malloc(rand_bytes_len);
+  crypto_rand(rand_bytes, rand_bytes_len);
+
+  result = tor_malloc(resultlen);
+  memcpy(result, prefix, prefixlen);
+  base32_encode(result+prefixlen, resultlen-prefixlen,
+                rand_bytes, rand_bytes_len);
+  tor_free(rand_bytes);
+  strlcpy(result+prefixlen+randlen, suffix, resultlen-(prefixlen+randlen));
+
+  return result;
+}
+
+/**
+ * Return a randomly chosen element of <b>sl</b>; or NULL if <b>sl</b>
+ * is empty.
+ **/
+void *
+smartlist_choose(const smartlist_t *sl)
+{
+  int len = smartlist_len(sl);
+  if (len)
+    return smartlist_get(sl,crypto_rand_int(len));
+  return NULL; /* no elements to choose from */
+}
+
+/**
+ * Scramble the elements of <b>sl</b> into a random order.
+ **/
+void
+smartlist_shuffle(smartlist_t *sl)
+{
+  int i;
+  /* From the end of the list to the front, choose at random from the
+     positions we haven't looked at yet, and swap that position into the
+     current position.  Remember to give "no swap" the same probability as
+     any other swap. */
+  for (i = smartlist_len(sl)-1; i > 0; --i) {
+    int j = crypto_rand_int(i+1);
+    smartlist_swap(sl, i, j);
+  }
+}
+
+/** Make sure that openssl is using its default PRNG. Return 1 if we had to
+ * adjust it; 0 otherwise. */
+int
+crypto_force_rand_ssleay(void)
+{
+  RAND_METHOD *default_method;
+  default_method = RAND_OpenSSL();
+  if (RAND_get_rand_method() != default_method) {
+    log_notice(LD_CRYPTO, "It appears that one of our engines has provided "
+               "a replacement the OpenSSL RNG. Resetting it to the default "
+               "implementation.");
+    RAND_set_rand_method(default_method);
+    return 1;
+  }
+  return 0;
+}
+
+#endif /* !defined(CRYPTO_RAND_PRIVATE) */
+
diff -pruN 0.3.3.9-1/src/common/crypto_rand.h 0.3.4.8-1/src/common/crypto_rand.h
--- 0.3.3.9-1/src/common/crypto_rand.h	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_rand.h	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,52 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file crypto_rand.h
+ *
+ * \brief Common functions for using (pseudo-)random number generators.
+ **/
+
+#ifndef TOR_CRYPTO_RAND_H
+#define TOR_CRYPTO_RAND_H
+
+#include "torint.h"
+#include "util.h"
+
+/* random numbers */
+int crypto_seed_rng(void) ATTR_WUR;
+MOCK_DECL(void,crypto_rand,(char *to, size_t n));
+void crypto_rand_unmocked(char *to, size_t n);
+void crypto_strongest_rand(uint8_t *out, size_t out_len);
+int crypto_rand_int(unsigned int max);
+int crypto_rand_int_range(unsigned int min, unsigned int max);
+uint64_t crypto_rand_uint64_range(uint64_t min, uint64_t max);
+time_t crypto_rand_time_range(time_t min, time_t max);
+uint64_t crypto_rand_uint64(uint64_t max);
+double crypto_rand_double(void);
+struct tor_weak_rng_t;
+void crypto_seed_weak_rng(struct tor_weak_rng_t *rng);
+
+char *crypto_random_hostname(int min_rand_len, int max_rand_len,
+                             const char *prefix, const char *suffix);
+
+struct smartlist_t;
+void *smartlist_choose(const struct smartlist_t *sl);
+void smartlist_shuffle(struct smartlist_t *sl);
+int crypto_force_rand_ssleay(void);
+
+#ifdef CRYPTO_RAND_PRIVATE
+
+STATIC int crypto_strongest_rand_raw(uint8_t *out, size_t out_len);
+
+#ifdef TOR_UNIT_TESTS
+extern int break_strongest_rng_syscall;
+extern int break_strongest_rng_fallback;
+#endif
+#endif /* defined(CRYPTO_RAND_PRIVATE) */
+
+#endif /* !defined(TOR_CRYPTO_RAND_H) */
+
diff -pruN 0.3.3.9-1/src/common/crypto_rsa.c 0.3.4.8-1/src/common/crypto_rsa.c
--- 0.3.3.9-1/src/common/crypto_rsa.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_rsa.c	2018-06-15 21:20:53.000000000 +0000
@@ -9,12 +9,14 @@
  * \brief Block of functions related with RSA utilities and operations.
  **/
 
-#include "crypto_rsa.h"
 #include "crypto.h"
-#include "compat_openssl.h"
 #include "crypto_curve25519.h"
-#include "crypto_ed25519.h"
+#include "crypto_digest.h"
 #include "crypto_format.h"
+#include "compat_openssl.h"
+#include "crypto_rand.h"
+#include "crypto_rsa.h"
+#include "crypto_util.h"
 
 DISABLE_GCC_WARNING(redundant-decls)
 
@@ -627,6 +629,148 @@ crypto_pk_copy_full(crypto_pk_t *env)
   return crypto_new_pk_from_rsa_(new_key);
 }
 
+/** Perform a hybrid (public/secret) encryption on <b>fromlen</b>
+ * bytes of data from <b>from</b>, with padding type 'padding',
+ * storing the results on <b>to</b>.
+ *
+ * Returns the number of bytes written on success, -1 on failure.
+ *
+ * The encrypted data consists of:
+ *   - The source data, padded and encrypted with the public key, if the
+ *     padded source data is no longer than the public key, and <b>force</b>
+ *     is false, OR
+ *   - The beginning of the source data prefixed with a 16-byte symmetric key,
+ *     padded and encrypted with the public key; followed by the rest of
+ *     the source data encrypted in AES-CTR mode with the symmetric key.
+ *
+ * NOTE that this format does not authenticate the symmetrically encrypted
+ * part of the data, and SHOULD NOT BE USED for new protocols.
+ */
+int
+crypto_pk_obsolete_public_hybrid_encrypt(crypto_pk_t *env,
+                                char *to, size_t tolen,
+                                const char *from,
+                                size_t fromlen,
+                                int padding, int force)
+{
+  int overhead, outlen, r;
+  size_t pkeylen, symlen;
+  crypto_cipher_t *cipher = NULL;
+  char *buf = NULL;
+
+  tor_assert(env);
+  tor_assert(from);
+  tor_assert(to);
+  tor_assert(fromlen < SIZE_T_CEILING);
+
+  overhead = crypto_get_rsa_padding_overhead(crypto_get_rsa_padding(padding));
+  pkeylen = crypto_pk_keysize(env);
+
+  if (!force && fromlen+overhead <= pkeylen) {
+    /* It all fits in a single encrypt. */
+    return crypto_pk_public_encrypt(env,to,
+                                    tolen,
+                                    from,fromlen,padding);
+  }
+  tor_assert(tolen >= fromlen + overhead + CIPHER_KEY_LEN);
+  tor_assert(tolen >= pkeylen);
+
+  char key[CIPHER_KEY_LEN];
+  crypto_rand(key, sizeof(key)); /* generate a new key. */
+  cipher = crypto_cipher_new(key);
+
+  buf = tor_malloc(pkeylen+1);
+  memcpy(buf, key, CIPHER_KEY_LEN);
+  memcpy(buf+CIPHER_KEY_LEN, from, pkeylen-overhead-CIPHER_KEY_LEN);
+
+  /* Length of symmetrically encrypted data. */
+  symlen = fromlen-(pkeylen-overhead-CIPHER_KEY_LEN);
+
+  outlen = crypto_pk_public_encrypt(env,to,tolen,buf,pkeylen-overhead,padding);
+  if (outlen!=(int)pkeylen) {
+    goto err;
+  }
+  r = crypto_cipher_encrypt(cipher, to+outlen,
+                            from+pkeylen-overhead-CIPHER_KEY_LEN, symlen);
+
+  if (r<0) goto err;
+  memwipe(buf, 0, pkeylen);
+  memwipe(key, 0, sizeof(key));
+  tor_free(buf);
+  crypto_cipher_free(cipher);
+  tor_assert(outlen+symlen < INT_MAX);
+  return (int)(outlen + symlen);
+ err:
+
+  memwipe(buf, 0, pkeylen);
+  memwipe(key, 0, sizeof(key));
+  tor_free(buf);
+  crypto_cipher_free(cipher);
+  return -1;
+}
+
+/** Invert crypto_pk_obsolete_public_hybrid_encrypt. Returns the number of
+ * bytes written on success, -1 on failure.
+ *
+ * NOTE that this format does not authenticate the symmetrically encrypted
+ * part of the data, and SHOULD NOT BE USED for new protocols.
+ */
+int
+crypto_pk_obsolete_private_hybrid_decrypt(crypto_pk_t *env,
+                                 char *to,
+                                 size_t tolen,
+                                 const char *from,
+                                 size_t fromlen,
+                                 int padding, int warnOnFailure)
+{
+  int outlen, r;
+  size_t pkeylen;
+  crypto_cipher_t *cipher = NULL;
+  char *buf = NULL;
+
+  tor_assert(fromlen < SIZE_T_CEILING);
+  pkeylen = crypto_pk_keysize(env);
+
+  if (fromlen <= pkeylen) {
+    return crypto_pk_private_decrypt(env,to,tolen,from,fromlen,padding,
+                                     warnOnFailure);
+  }
+
+  buf = tor_malloc(pkeylen);
+  outlen = crypto_pk_private_decrypt(env,buf,pkeylen,from,pkeylen,padding,
+                                     warnOnFailure);
+  if (outlen<0) {
+    log_fn(warnOnFailure?LOG_WARN:LOG_DEBUG, LD_CRYPTO,
+           "Error decrypting public-key data");
+    goto err;
+  }
+  if (outlen < CIPHER_KEY_LEN) {
+    log_fn(warnOnFailure?LOG_WARN:LOG_INFO, LD_CRYPTO,
+           "No room for a symmetric key");
+    goto err;
+  }
+  cipher = crypto_cipher_new(buf);
+  if (!cipher) {
+    goto err;
+  }
+  memcpy(to,buf+CIPHER_KEY_LEN,outlen-CIPHER_KEY_LEN);
+  outlen -= CIPHER_KEY_LEN;
+  tor_assert(tolen - outlen >= fromlen - pkeylen);
+  r = crypto_cipher_decrypt(cipher, to+outlen, from+pkeylen, fromlen-pkeylen);
+  if (r<0)
+    goto err;
+  memwipe(buf,0,pkeylen);
+  tor_free(buf);
+  crypto_cipher_free(cipher);
+  tor_assert(outlen + fromlen < INT_MAX);
+  return (int)(outlen + (fromlen-pkeylen));
+ err:
+  memwipe(buf,0,pkeylen);
+  tor_free(buf);
+  crypto_cipher_free(cipher);
+  return -1;
+}
+
 /** Encrypt <b>fromlen</b> bytes from <b>from</b> with the public key
  * in <b>env</b>, using the padding method <b>padding</b>.  On success,
  * write the result to <b>to</b>, and return the number of bytes
@@ -849,6 +993,122 @@ crypto_pk_get_hashed_fingerprint(crypto_
   return 0;
 }
 
+/** Check a siglen-byte long signature at <b>sig</b> against
+ * <b>datalen</b> bytes of data at <b>data</b>, using the public key
+ * in <b>env</b>. Return 0 if <b>sig</b> is a correct signature for
+ * SHA1(data).  Else return -1.
+ */
+MOCK_IMPL(int,
+crypto_pk_public_checksig_digest,(crypto_pk_t *env, const char *data,
+                                  size_t datalen, const char *sig,
+                                  size_t siglen))
+{
+  char digest[DIGEST_LEN];
+  char *buf;
+  size_t buflen;
+  int r;
+
+  tor_assert(env);
+  tor_assert(data);
+  tor_assert(sig);
+  tor_assert(datalen < SIZE_T_CEILING);
+  tor_assert(siglen < SIZE_T_CEILING);
+
+  if (crypto_digest(digest,data,datalen)<0) {
+    log_warn(LD_BUG, "couldn't compute digest");
+    return -1;
+  }
+  buflen = crypto_pk_keysize(env);
+  buf = tor_malloc(buflen);
+  r = crypto_pk_public_checksig(env,buf,buflen,sig,siglen);
+  if (r != DIGEST_LEN) {
+    log_warn(LD_CRYPTO, "Invalid signature");
+    tor_free(buf);
+    return -1;
+  }
+  if (tor_memneq(buf, digest, DIGEST_LEN)) {
+    log_warn(LD_CRYPTO, "Signature mismatched with digest.");
+    tor_free(buf);
+    return -1;
+  }
+  tor_free(buf);
+
+  return 0;
+}
+
+/** Compute a SHA1 digest of <b>fromlen</b> bytes of data stored at
+ * <b>from</b>; sign the data with the private key in <b>env</b>, and
+ * store it in <b>to</b>.  Return the number of bytes written on
+ * success, and -1 on failure.
+ *
+ * <b>tolen</b> is the number of writable bytes in <b>to</b>, and must be
+ * at least the length of the modulus of <b>env</b>.
+ */
+int
+crypto_pk_private_sign_digest(crypto_pk_t *env, char *to, size_t tolen,
+                              const char *from, size_t fromlen)
+{
+  int r;
+  char digest[DIGEST_LEN];
+  if (crypto_digest(digest,from,fromlen)<0)
+    return -1;
+  r = crypto_pk_private_sign(env,to,tolen,digest,DIGEST_LEN);
+  memwipe(digest, 0, sizeof(digest));
+  return r;
+}
+
+/** Given a private or public key <b>pk</b>, put a SHA1 hash of the
+ * public key into <b>digest_out</b> (must have DIGEST_LEN bytes of space).
+ * Return 0 on success, -1 on failure.
+ */
+int
+crypto_pk_get_digest(const crypto_pk_t *pk, char *digest_out)
+{
+  char *buf;
+  size_t buflen;
+  int len;
+  int rv = -1;
+
+  buflen = crypto_pk_keysize(pk)*2;
+  buf = tor_malloc(buflen);
+  len = crypto_pk_asn1_encode(pk, buf, buflen);
+  if (len < 0)
+    goto done;
+
+  if (crypto_digest(digest_out, buf, len) < 0)
+    goto done;
+
+  rv = 0;
+  done:
+  tor_free(buf);
+  return rv;
+}
+
+/** Compute all digests of the DER encoding of <b>pk</b>, and store them
+ * in <b>digests_out</b>.  Return 0 on success, -1 on failure. */
+int
+crypto_pk_get_common_digests(crypto_pk_t *pk, common_digests_t *digests_out)
+{
+  char *buf;
+  size_t buflen;
+  int len;
+  int rv = -1;
+
+  buflen = crypto_pk_keysize(pk)*2;
+  buf = tor_malloc(buflen);
+  len = crypto_pk_asn1_encode(pk, buf, buflen);
+  if (len < 0)
+    goto done;
+
+  if (crypto_common_digests(digests_out, (char*)buf, len) < 0)
+    goto done;
+
+  rv = 0;
+ done:
+  tor_free(buf);
+  return rv;
+}
+
 /** Given a crypto_pk_t <b>pk</b>, allocate a new buffer containing the
  * Base64 encoding of the DER representation of the private key as a NUL
  * terminated string, and return it via <b>priv_out</b>.  Return 0 on
diff -pruN 0.3.3.9-1/src/common/crypto_rsa.h 0.3.4.8-1/src/common/crypto_rsa.h
--- 0.3.3.9-1/src/common/crypto_rsa.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_rsa.h	2018-06-15 21:20:53.000000000 +0000
@@ -15,13 +15,13 @@
 
 #include "orconfig.h"
 
+#include "crypto_digest.h"
 #include <stdio.h>
 #include "torint.h"
 #include "testsupport.h"
 #include "compat.h"
 #include "util.h"
 #include "torlog.h"
-#include "crypto_curve25519.h"
 
 /** Length of our public keys. */
 #define PK_BYTES (1024/8)
@@ -35,7 +35,7 @@
 /** A public key, or a public/private key-pair. */
 typedef struct crypto_pk_t crypto_pk_t;
 
-/* RSA enviroment setup */
+/* RSA environment setup */
 MOCK_DECL(crypto_pk_t *,crypto_pk_new,(void));
 void crypto_pk_free_(crypto_pk_t *env);
 #define crypto_pk_free(pk) FREE_AND_NULL(crypto_pk_t, crypto_pk_free_, (pk))
@@ -69,6 +69,14 @@ crypto_pk_t *crypto_pk_dup_key(crypto_pk
 crypto_pk_t *crypto_pk_copy_full(crypto_pk_t *orig);
 int crypto_pk_key_is_private(const crypto_pk_t *key);
 int crypto_pk_public_exponent_ok(crypto_pk_t *env);
+int crypto_pk_obsolete_public_hybrid_encrypt(crypto_pk_t *env, char *to,
+                                    size_t tolen,
+                                    const char *from, size_t fromlen,
+                                    int padding, int force);
+int crypto_pk_obsolete_private_hybrid_decrypt(crypto_pk_t *env, char *to,
+                                     size_t tolen,
+                                     const char *from, size_t fromlen,
+                                     int padding, int warnOnFailure);
 int crypto_pk_public_encrypt(crypto_pk_t *env, char *to, size_t tolen,
                              const char *from, size_t fromlen, int padding);
 int crypto_pk_private_decrypt(crypto_pk_t *env, char *to, size_t tolen,
@@ -84,6 +92,13 @@ crypto_pk_t *crypto_pk_asn1_decode(const
 int crypto_pk_get_fingerprint(crypto_pk_t *pk, char *fp_out,int add_space);
 int crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out);
 
+MOCK_DECL(int, crypto_pk_public_checksig_digest,(crypto_pk_t *env,
+          const char *data, size_t datalen, const char *sig, size_t siglen));
+int crypto_pk_private_sign_digest(crypto_pk_t *env, char *to, size_t tolen,
+                                  const char *from, size_t fromlen);
+int crypto_pk_get_digest(const crypto_pk_t *pk, char *digest_out);
+int crypto_pk_get_common_digests(crypto_pk_t *pk,
+                                 common_digests_t *digests_out);
 int crypto_pk_base64_encode(const crypto_pk_t *pk, char **priv_out);
 crypto_pk_t *crypto_pk_base64_decode(const char *str, size_t len);
 
diff -pruN 0.3.3.9-1/src/common/crypto_s2k.c 0.3.4.8-1/src/common/crypto_s2k.c
--- 0.3.3.9-1/src/common/crypto_s2k.c	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_s2k.c	2018-06-15 21:20:53.000000000 +0000
@@ -12,10 +12,13 @@
 
 #define CRYPTO_S2K_PRIVATE
 
-#include "crypto.h"
-#include "util.h"
 #include "compat.h"
+#include "crypto.h"
+#include "crypto_digest.h"
+#include "crypto_rand.h"
 #include "crypto_s2k.h"
+#include "crypto_util.h"
+#include "util.h"
 
 #include <openssl/evp.h>
 
diff -pruN 0.3.3.9-1/src/common/crypto_util.c 0.3.4.8-1/src/common/crypto_util.c
--- 0.3.3.9-1/src/common/crypto_util.c	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_util.c	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,107 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file crypto_util.c
+ *
+ * \brief Common cryptographic utilities.
+ **/
+
+#ifndef CRYPTO_UTIL_PRIVATE
+#define CRYPTO_UTIL_PRIVATE
+
+#include "crypto_util.h"
+
+#include <string.h>
+
+#ifdef _WIN32
+#include <winsock2.h>
+#include <windows.h>
+#include <wincrypt.h>
+#endif /* defined(_WIN32) */
+
+#include "util.h"
+
+DISABLE_GCC_WARNING(redundant-decls)
+
+#include <openssl/crypto.h>
+
+ENABLE_GCC_WARNING(redundant-decls)
+
+/**
+ * Destroy the <b>sz</b> bytes of data stored at <b>mem</b>, setting them to
+ * the value <b>byte</b>.
+ * If <b>mem</b> is NULL or <b>sz</b> is zero, nothing happens.
+ *
+ * This function is preferable to memset, since many compilers will happily
+ * optimize out memset() when they can convince themselves that the data being
+ * cleared will never be read.
+ *
+ * Right now, our convention is to use this function when we are wiping data
+ * that's about to become inaccessible, such as stack buffers that are about
+ * to go out of scope or structures that are about to get freed.  (In
+ * practice, it appears that the compilers we're currently using will optimize
+ * out the memset()s for stack-allocated buffers, but not those for
+ * about-to-be-freed structures. That could change, though, so we're being
+ * wary.)  If there are live reads for the data, then you can just use
+ * memset().
+ */
+void
+memwipe(void *mem, uint8_t byte, size_t sz)
+{
+  if (sz == 0) {
+    return;
+  }
+  /* If sz is nonzero, then mem must not be NULL. */
+  tor_assert(mem != NULL);
+
+  /* Data this large is likely to be an underflow. */
+  tor_assert(sz < SIZE_T_CEILING);
+
+  /* Because whole-program-optimization exists, we may not be able to just
+   * have this function call "memset".  A smart compiler could inline it, then
+   * eliminate dead memsets, and declare itself to be clever. */
+
+#if defined(SecureZeroMemory) || defined(HAVE_SECUREZEROMEMORY)
+  /* Here's what you do on windows. */
+  SecureZeroMemory(mem,sz);
+#elif defined(HAVE_RTLSECUREZEROMEMORY)
+  RtlSecureZeroMemory(mem,sz);
+#elif defined(HAVE_EXPLICIT_BZERO)
+  /* The BSDs provide this. */
+  explicit_bzero(mem, sz);
+#elif defined(HAVE_MEMSET_S)
+  /* This is in the C99 standard. */
+  memset_s(mem, sz, 0, sz);
+#else
+  /* This is a slow and ugly function from OpenSSL that fills 'mem' with junk
+   * based on the pointer value, then uses that junk to update a global
+   * variable.  It's an elaborate ruse to trick the compiler into not
+   * optimizing out the "wipe this memory" code.  Read it if you like zany
+   * programming tricks! In later versions of Tor, we should look for better
+   * not-optimized-out memory wiping stuff...
+   *
+   * ...or maybe not.  In practice, there are pure-asm implementations of
+   * OPENSSL_cleanse() on most platforms, which ought to do the job.
+   **/
+
+  OPENSSL_cleanse(mem, sz);
+#endif /* defined(SecureZeroMemory) || defined(HAVE_SECUREZEROMEMORY) || ... */
+
+  /* Just in case some caller of memwipe() is relying on getting a buffer
+   * filled with a particular value, fill the buffer.
+   *
+   * If this function gets inlined, this memset might get eliminated, but
+   * that's okay: We only care about this particular memset in the case where
+   * the caller should have been using memset(), and the memset() wouldn't get
+   * eliminated.  In other words, this is here so that we won't break anything
+   * if somebody accidentally calls memwipe() instead of memset().
+   **/
+  memset(mem, byte, sz);
+}
+
+#endif /* !defined(CRYPTO_UTIL_PRIVATE) */
+
diff -pruN 0.3.3.9-1/src/common/crypto_util.h 0.3.4.8-1/src/common/crypto_util.h
--- 0.3.3.9-1/src/common/crypto_util.h	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/crypto_util.h	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,27 @@
+/* Copyright (c) 2001, Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file crypto_util.h
+ *
+ * \brief Common functions for cryptographic routines.
+ **/
+
+#ifndef TOR_CRYPTO_UTIL_H
+#define TOR_CRYPTO_UTIL_H
+
+#include "torint.h"
+
+/** OpenSSL-based utility functions. */
+void memwipe(void *mem, uint8_t byte, size_t sz);
+
+#ifdef CRYPTO_UTIL_PRIVATE
+#ifdef TOR_UNIT_TESTS
+#endif /* defined(TOR_UNIT_TESTS) */
+#endif /* defined(CRYPTO_UTIL_PRIVATE) */
+
+#endif /* !defined(TOR_CRYPTO_UTIL_H) */
+
diff -pruN 0.3.3.9-1/src/common/include.am 0.3.4.8-1/src/common/include.am
--- 0.3.3.9-1/src/common/include.am	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/include.am	2018-06-15 21:20:53.000000000 +0000
@@ -74,7 +74,11 @@ LIBOR_CTIME_A_SRC = \
    src/common/di_ops.c
 
 src_common_libor_ctime_a_SOURCES = $(LIBOR_CTIME_A_SRC)
+if UNITTESTS_ENABLED
 src_common_libor_ctime_testing_a_SOURCES = $(LIBOR_CTIME_A_SRC)
+else
+src_common_libor_ctime_testing_a_SOURCES =
+endif
 src_common_libor_ctime_a_CFLAGS = @CFLAGS_CONSTTIME@
 src_common_libor_ctime_testing_a_CFLAGS = @CFLAGS_CONSTTIME@ $(TEST_CFLAGS)
 
@@ -97,6 +101,7 @@ LIBOR_A_SRC = \
   src/common/util_process.c				\
   src/common/sandbox.c					\
   src/common/storagedir.c				\
+  src/common/token_bucket.c				\
   src/common/workqueue.c				\
   $(libor_extra_source)					\
   $(threads_impl_source)				\
@@ -114,11 +119,14 @@ LIBOR_CRYPTO_A_SRC = \
   src/common/compress_zlib.c	\
   src/common/compress_zstd.c	\
   src/common/crypto.c		\
-  src/common/crypto_rsa.c     \
+  src/common/crypto_digest.c     \
+  src/common/crypto_format.c	\
   src/common/crypto_openssl_mgt.c    \
   src/common/crypto_pwbox.c     \
+  src/common/crypto_rand.c     \
+  src/common/crypto_rsa.c     \
   src/common/crypto_s2k.c	\
-  src/common/crypto_format.c	\
+  src/common/crypto_util.c	\
   src/common/tortls.c		\
   src/common/crypto_curve25519.c \
   src/common/crypto_ed25519.c
@@ -133,9 +141,15 @@ src_common_libor_a_SOURCES = $(LIBOR_A_S
 src_common_libor_crypto_a_SOURCES = $(LIBOR_CRYPTO_A_SRC)
 src_common_libor_event_a_SOURCES = $(LIBOR_EVENT_A_SRC)
 
+if UNITTESTS_ENABLED
 src_common_libor_testing_a_SOURCES = $(LIBOR_A_SRC)
 src_common_libor_crypto_testing_a_SOURCES = $(LIBOR_CRYPTO_A_SRC)
 src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SRC)
+else
+src_common_libor_testing_a_SOURCES =
+src_common_libor_crypto_testing_a_SOURCES =
+src_common_libor_event_testing_a_SOURCES =
+endif
 
 src_common_libor_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_common_libor_crypto_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
@@ -165,13 +179,16 @@ COMMONHEADERS = \
   src/common/confline.h				\
   src/common/container.h			\
   src/common/crypto.h				\
+  src/common/crypto_digest.h            \
   src/common/crypto_curve25519.h		\
   src/common/crypto_ed25519.h			\
   src/common/crypto_format.h			\
   src/common/crypto_openssl_mgt.h         \
-  src/common/crypto_rsa.h           \
   src/common/crypto_pwbox.h			\
+  src/common/crypto_rand.h          \
+  src/common/crypto_rsa.h           \
   src/common/crypto_s2k.h			\
+  src/common/crypto_util.h			\
   src/common/di_ops.h				\
   src/common/handles.h				\
   src/common/memarea.h				\
@@ -182,6 +199,7 @@ COMMONHEADERS = \
   src/common/storagedir.h			\
   src/common/testsupport.h			\
   src/common/timers.h				\
+  src/common/token_bucket.h			\
   src/common/torint.h				\
   src/common/torlog.h				\
   src/common/tortls.h				\
diff -pruN 0.3.3.9-1/src/common/log.c 0.3.4.8-1/src/common/log.c
--- 0.3.3.9-1/src/common/log.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/log.c	2018-06-15 21:20:53.000000000 +0000
@@ -52,6 +52,13 @@
 
 #define raw_assert(x) assert(x) // assert OK
 
+/** Defining compile-time constants for Tor log levels (used by the Rust
+ * log wrapper at src/rust/tor_log) */
+const int LOG_WARN_ = LOG_WARN;
+const int LOG_NOTICE_ = LOG_NOTICE;
+const log_domain_mask_t LD_GENERAL_ = LD_GENERAL;
+const log_domain_mask_t LD_NET_ = LD_NET;
+
 /** Information for a single logfile; only used in log.c */
 typedef struct logfile_t {
   struct logfile_t *next; /**< Next logfile_t in the linked list. */
@@ -163,6 +170,9 @@ typedef struct pending_log_message_t {
 /** Log messages waiting to be replayed onto callback-based logs */
 static smartlist_t *pending_cb_messages = NULL;
 
+/** Callback to invoke when pending_cb_messages becomes nonempty. */
+static pending_callback_callback pending_cb_cb = NULL;
+
 /** Log messages waiting to be replayed once the logging system is initialized.
  */
 static smartlist_t *pending_startup_messages = NULL;
@@ -225,6 +235,30 @@ log_set_application_name(const char *nam
   appname = name ? tor_strdup(name) : NULL;
 }
 
+/** Return true if some of the running logs might be interested in a log
+ * message of the given severity in the given domains. If this function
+ * returns true, the log message might be ignored anyway, but if it returns
+ * false, it is definitely_ safe not to log the message. */
+int
+log_message_is_interesting(int severity, log_domain_mask_t domain)
+{
+  (void) domain;
+  return (severity <= log_global_min_severity_);
+}
+
+/**
+ * As tor_log, but takes an optional function name, and does not treat its
+ * <b>string</b> as a printf format.
+ *
+ * For use by Rust integration.
+ */
+void
+tor_log_string(int severity, log_domain_mask_t domain,
+               const char *function, const char *string)
+{
+  log_fn_(severity, domain, function, "%s", string);
+}
+
 /** Log time granularity in milliseconds. */
 static int log_time_granularity = 1;
 
@@ -507,6 +541,9 @@ logfile_deliver(logfile_t *lf, const cha
         smartlist_add(pending_cb_messages,
             pending_log_message_new(severity,domain,NULL,msg_after_prefix));
         *callbacks_deferred = 1;
+        if (smartlist_len(pending_cb_messages) == 1 && pending_cb_cb) {
+          pending_cb_cb();
+        }
       }
     } else {
       lf->callback(severity, domain, msg_after_prefix);
@@ -794,6 +831,7 @@ logs_free_all(void)
   logfiles = NULL;
   messages = pending_cb_messages;
   pending_cb_messages = NULL;
+  pending_cb_cb = NULL;
   messages2 = pending_startup_messages;
   pending_startup_messages = NULL;
   UNLOCK_LOGS();
@@ -957,6 +995,24 @@ add_temp_log(int min_severity)
 }
 
 /**
+ * Register "cb" as the callback to call when there are new pending log
+ * callbacks to be flushed with flush_pending_log_callbacks().
+ *
+ * Note that this callback, if present, can be invoked from any thread.
+ *
+ * This callback must not log.
+ *
+ * It is intentional that this function contains the name "callback" twice: it
+ * sets a "callback" to be called on the condition that there is a "pending
+ * callback".
+ **/
+void
+logs_set_pending_callback_callback(pending_callback_callback cb)
+{
+  pending_cb_cb = cb;
+}
+
+/**
  * Add a log handler to send messages in <b>severity</b>
  * to the function <b>cb</b>.
  */
diff -pruN 0.3.3.9-1/src/common/procmon.c 0.3.4.8-1/src/common/procmon.c
--- 0.3.3.9-1/src/common/procmon.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/procmon.c	2018-06-15 21:20:53.000000000 +0000
@@ -10,8 +10,6 @@
 
 #include "util.h"
 
-#include <event2/event.h>
-
 #ifdef HAVE_SIGNAL_H
 #include <signal.h>
 #endif
@@ -44,7 +42,7 @@ typedef int pid_t;
 /* Currently we need to poll in some way on all systems. */
 
 #ifdef PROCMON_POLLS
-static void tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
+static void tor_process_monitor_poll_cb(periodic_timer_t *ev,
                                         void *procmon_);
 #endif
 
@@ -136,7 +134,7 @@ struct tor_process_monitor_t {
 
   /** A Libevent event structure, to either poll for the process's
    * existence or receive a notification when the process ends. */
-  struct event *e;
+  periodic_timer_t *e;
 
   /** A callback to be called when the process ends. */
   tor_procmon_callback_t cb;
@@ -159,9 +157,6 @@ tor_validate_process_specifier(const cha
   return parse_process_specifier(process_spec, &ppspec, msg);
 }
 
-/* XXXX we should use periodic_timer_new() for this stuff */
-#define PERIODIC_TIMER_FLAGS EV_PERSIST
-
 /* DOCDOC poll_interval_tv */
 static const struct timeval poll_interval_tv = {15, 0};
 
@@ -225,13 +220,9 @@ tor_process_monitor_new(struct event_bas
   procmon->cb_arg = cb_arg;
 
 #ifdef PROCMON_POLLS
-  procmon->e = tor_event_new(base, -1 /* no FD */, PERIODIC_TIMER_FLAGS,
-                             tor_process_monitor_poll_cb, procmon);
-  /* Note: If you port this file to plain Libevent 2, check that
-   * procmon->e is non-NULL.  We don't need to here because
-   * tor_evtimer_new never returns NULL. */
-
-  evtimer_add(procmon->e, &poll_interval_tv);
+  procmon->e = periodic_timer_new(base,
+                                  &poll_interval_tv,
+                                  tor_process_monitor_poll_cb, procmon);
 #else /* !(defined(PROCMON_POLLS)) */
 #error OOPS?
 #endif /* defined(PROCMON_POLLS) */
@@ -246,14 +237,12 @@ tor_process_monitor_new(struct event_bas
 /** Libevent callback to poll for the existence of the process
  * monitored by <b>procmon_</b>. */
 static void
-tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
-                            void *procmon_)
+tor_process_monitor_poll_cb(periodic_timer_t *event, void *procmon_)
 {
+  (void)event;
   tor_process_monitor_t *procmon = (tor_process_monitor_t *)(procmon_);
   int its_dead_jim;
 
-  (void)unused1; (void)unused2;
-
   tor_assert(procmon != NULL);
 
 #ifdef _WIN32
@@ -336,7 +325,7 @@ tor_process_monitor_free_(tor_process_mo
 #endif
 
   if (procmon->e != NULL)
-    tor_event_free(procmon->e);
+    periodic_timer_free(procmon->e);
 
   tor_free(procmon);
 }
diff -pruN 0.3.3.9-1/src/common/sandbox.c 0.3.4.8-1/src/common/sandbox.c
--- 0.3.3.9-1/src/common/sandbox.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/sandbox.c	2018-08-08 13:26:23.000000000 +0000
@@ -450,7 +450,7 @@ allow_file_open(scmp_filter_ctx ctx, int
 {
   if (use_openat) {
     return seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat),
-                              SCMP_CMP_STR(0, SCMP_CMP_EQ, AT_FDCWD),
+                              SCMP_CMP(0, SCMP_CMP_EQ, (unsigned int)AT_FDCWD),
                               SCMP_CMP_STR(1, SCMP_CMP_EQ, file));
   } else {
     return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open),
diff -pruN 0.3.3.9-1/src/common/timers.c 0.3.4.8-1/src/common/timers.c
--- 0.3.3.9-1/src/common/timers.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/timers.c	2018-06-15 21:20:53.000000000 +0000
@@ -37,8 +37,6 @@
 #include "torlog.h"
 #include "util.h"
 
-#include <event2/event.h>
-
 struct timeout_cb {
   timer_cb_fn_t cb;
   void *arg;
@@ -66,10 +64,15 @@ struct timeout_cb {
  * above TIMEOUT_MAX can also be super-inefficient. Choosing 5 here sets
  * timeout_max to 2^30 ticks, or 29 hours with our value for USEC_PER_TICK */
 #define WHEEL_NUM 5
+#if SIZEOF_VOID_P == 4
+/* On 32-bit platforms, we want to override wheel_bit, so that timeout.c will
+ * use 32-bit math. */
+#define WHEEL_BIT 5
+#endif
 #include "src/ext/timeouts/timeout.c"
 
 static struct timeouts *global_timeouts = NULL;
-static struct event *global_timer_event = NULL;
+static struct mainloop_event_t *global_timer_event = NULL;
 
 static monotime_t start_of_time;
 
@@ -147,7 +150,7 @@ libevent_timer_reschedule(void)
   if (delay > MIN_CHECK_TICKS)
     delay = MIN_CHECK_TICKS;
   timeout_to_tv(delay, &d);
-  event_add(global_timer_event, &d);
+  mainloop_event_schedule(global_timer_event, &d);
 }
 
 /** Run the callback of every timer that has expired, based on the current
@@ -170,10 +173,9 @@ timers_run_pending(void)
  * have fired, activate their callbacks, and reschedule the libevent timer.
  */
 static void
-libevent_timer_callback(evutil_socket_t fd, short what, void *arg)
+libevent_timer_callback(mainloop_event_t *ev, void *arg)
 {
-  (void)fd;
-  (void)what;
+  (void)ev;
   (void)arg;
 
   timers_run_pending();
@@ -203,9 +205,8 @@ timers_initialize(void)
   monotime_init();
   monotime_get(&start_of_time);
 
-  struct event *timer_event;
-  timer_event = tor_event_new(tor_libevent_get_base(),
-                              -1, 0, libevent_timer_callback, NULL);
+  mainloop_event_t *timer_event;
+  timer_event = mainloop_event_new(libevent_timer_callback, NULL);
   tor_assert(timer_event);
   global_timer_event = timer_event;
 
@@ -219,7 +220,7 @@ void
 timers_shutdown(void)
 {
   if (global_timer_event) {
-    tor_event_free(global_timer_event);
+    mainloop_event_free(global_timer_event);
     global_timer_event = NULL;
   }
   if (global_timeouts) {
diff -pruN 0.3.3.9-1/src/common/token_bucket.c 0.3.4.8-1/src/common/token_bucket.c
--- 0.3.3.9-1/src/common/token_bucket.c	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/token_bucket.c	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,255 @@
+/* Copyright (c) 2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file token_bucket.c
+ * \brief Functions to use and manipulate token buckets, used for
+ *    rate-limiting on connections and globally.
+ *
+ * Tor uses these token buckets to keep track of bandwidth usage, and
+ * sometimes other things too.
+ *
+ * There are two layers of abstraction here: "raw" token buckets, in which all
+ * the pieces are decoupled, and "read-write" token buckets, which combine all
+ * the moving parts into one.
+ *
+ * Token buckets may become negative.
+ **/
+
+#define TOKEN_BUCKET_PRIVATE
+
+#include "token_bucket.h"
+#include "util_bug.h"
+
+/**
+ * Set the <b>rate</b> and <b>burst</b> value in a token_bucket_cfg.
+ *
+ * Note that the <b>rate</b> value is in arbitrary units, but those units will
+ * determine the units of token_bucket_raw_dec(), token_bucket_raw_refill, and
+ * so on.
+ */
+void
+token_bucket_cfg_init(token_bucket_cfg_t *cfg,
+                      uint32_t rate,
+                      uint32_t burst)
+{
+  tor_assert_nonfatal(rate > 0);
+  tor_assert_nonfatal(burst > 0);
+  if (burst > TOKEN_BUCKET_MAX_BURST)
+    burst = TOKEN_BUCKET_MAX_BURST;
+
+  cfg->rate = rate;
+  cfg->burst = burst;
+}
+
+/**
+ * Initialize a raw token bucket and its associated timestamp to the "full"
+ * state, according to <b>cfg</b>.
+ */
+void
+token_bucket_raw_reset(token_bucket_raw_t *bucket,
+                       const token_bucket_cfg_t *cfg)
+{
+  bucket->bucket = cfg->burst;
+}
+
+/**
+ * Adust a preexisting token bucket to respect the new configuration
+ * <b>cfg</b>, by decreasing its current level if needed. */
+void
+token_bucket_raw_adjust(token_bucket_raw_t *bucket,
+                        const token_bucket_cfg_t *cfg)
+{
+  bucket->bucket = MIN(bucket->bucket, cfg->burst);
+}
+
+/**
+ * Given an amount of <b>elapsed</b> time units, and a bucket configuration
+ * <b>cfg</b>, refill the level of <b>bucket</b> accordingly.  Note that the
+ * units of time in <b>elapsed</b> must correspond to those used to set the
+ * rate in <b>cfg</b>, or the result will be illogical.
+ */
+int
+token_bucket_raw_refill_steps(token_bucket_raw_t *bucket,
+                              const token_bucket_cfg_t *cfg,
+                              const uint32_t elapsed)
+{
+  const int was_empty = (bucket->bucket <= 0);
+  /* The casts here prevent an underflow.
+   *
+   * Note that even if the bucket value is negative, subtracting it from
+   * "burst" will still produce a correct result.  If this result is
+   * ridiculously high, then the "elapsed > gap / rate" check below
+   * should catch it. */
+  const size_t gap = ((size_t)cfg->burst) - ((size_t)bucket->bucket);
+
+  if (elapsed > gap / cfg->rate) {
+    bucket->bucket = cfg->burst;
+  } else {
+    bucket->bucket += cfg->rate * elapsed;
+  }
+
+  return was_empty && bucket->bucket > 0;
+}
+
+/**
+ * Decrement a provided bucket by <b>n</b> units.  Note that <b>n</b>
+ * must be nonnegative.
+ */
+int
+token_bucket_raw_dec(token_bucket_raw_t *bucket,
+                     ssize_t n)
+{
+  if (BUG(n < 0))
+    return 0;
+  const int becomes_empty = bucket->bucket > 0 && n >= bucket->bucket;
+  bucket->bucket -= n;
+  return becomes_empty;
+}
+
+/** Convert a rate in bytes per second to a rate in bytes per step */
+STATIC uint32_t
+rate_per_sec_to_rate_per_step(uint32_t rate)
+{
+  /*
+    The precise calculation we'd want to do is
+
+    (rate / 1000) * to_approximate_msec(TICKS_PER_STEP).  But to minimize
+    rounding error, we do it this way instead, and divide last.
+  */
+  uint64_t units = (uint64_t) rate * TICKS_PER_STEP;
+  uint32_t val = (uint32_t)
+    (monotime_coarse_stamp_units_to_approx_msec(units) / 1000);
+  return val ? val : 1;
+}
+
+/**
+ * Initialize a token bucket in *<b>bucket</b>, set up to allow <b>rate</b>
+ * bytes per second, with a maximum burst of <b>burst</b> bytes. The bucket
+ * is created such that <b>now_ts</b> is the current timestamp.  The bucket
+ * starts out full.
+ */
+void
+token_bucket_rw_init(token_bucket_rw_t *bucket,
+                     uint32_t rate,
+                     uint32_t burst,
+                     uint32_t now_ts)
+{
+  memset(bucket, 0, sizeof(token_bucket_rw_t));
+  token_bucket_rw_adjust(bucket, rate, burst);
+  token_bucket_rw_reset(bucket, now_ts);
+}
+
+/**
+ * Change the configured rate (in bytes per second) and burst (in bytes)
+ * for the token bucket in *<b>bucket</b>.
+ */
+void
+token_bucket_rw_adjust(token_bucket_rw_t *bucket,
+                       uint32_t rate,
+                       uint32_t burst)
+{
+  token_bucket_cfg_init(&bucket->cfg,
+                        rate_per_sec_to_rate_per_step(rate),
+                        burst);
+  token_bucket_raw_adjust(&bucket->read_bucket, &bucket->cfg);
+  token_bucket_raw_adjust(&bucket->write_bucket, &bucket->cfg);
+}
+
+/**
+ * Reset <b>bucket</b> to be full, as of timestamp <b>now_ts</b>.
+ */
+void
+token_bucket_rw_reset(token_bucket_rw_t *bucket,
+                      uint32_t now_ts)
+{
+  token_bucket_raw_reset(&bucket->read_bucket, &bucket->cfg);
+  token_bucket_raw_reset(&bucket->write_bucket, &bucket->cfg);
+  bucket->last_refilled_at_timestamp = now_ts;
+}
+
+/**
+ * Refill <b>bucket</b> as appropriate, given that the current timestamp
+ * is <b>now_ts</b>.
+ *
+ * Return a bitmask containing TB_READ iff read bucket was empty and became
+ * nonempty, and TB_WRITE iff the write bucket was empty and became nonempty.
+ */
+int
+token_bucket_rw_refill(token_bucket_rw_t *bucket,
+                       uint32_t now_ts)
+{
+  const uint32_t elapsed_ticks =
+    (now_ts - bucket->last_refilled_at_timestamp);
+  if (elapsed_ticks > UINT32_MAX-(300*1000)) {
+    /* Either about 48 days have passed since the last refill, or the
+     * monotonic clock has somehow moved backwards. (We're looking at you,
+     * Windows.).  We accept up to a 5 minute jump backwards as
+     * "unremarkable".
+     */
+    return 0;
+  }
+  const uint32_t elapsed_steps = elapsed_ticks / TICKS_PER_STEP;
+
+  if (!elapsed_steps) {
+    /* Note that if less than one whole step elapsed, we don't advance the
+     * time in last_refilled_at. That's intentional: we want to make sure
+     * that we add some bytes to it eventually. */
+    return 0;
+  }
+
+  int flags = 0;
+  if (token_bucket_raw_refill_steps(&bucket->read_bucket,
+                                    &bucket->cfg, elapsed_steps))
+    flags |= TB_READ;
+  if (token_bucket_raw_refill_steps(&bucket->write_bucket,
+                                    &bucket->cfg, elapsed_steps))
+    flags |= TB_WRITE;
+
+  bucket->last_refilled_at_timestamp = now_ts;
+  return flags;
+}
+
+/**
+ * Decrement the read token bucket in <b>bucket</b> by <b>n</b> bytes.
+ *
+ * Return true if the bucket was nonempty and became empty; return false
+ * otherwise.
+ */
+int
+token_bucket_rw_dec_read(token_bucket_rw_t *bucket,
+                         ssize_t n)
+{
+  return token_bucket_raw_dec(&bucket->read_bucket, n);
+}
+
+/**
+ * Decrement the write token bucket in <b>bucket</b> by <b>n</b> bytes.
+ *
+ * Return true if the bucket was nonempty and became empty; return false
+ * otherwise.
+ */
+int
+token_bucket_rw_dec_write(token_bucket_rw_t *bucket,
+                          ssize_t n)
+{
+  return token_bucket_raw_dec(&bucket->write_bucket, n);
+}
+
+/**
+ * As token_bucket_rw_dec_read and token_bucket_rw_dec_write, in a single
+ * operation.  Return a bitmask of TB_READ and TB_WRITE to indicate
+ * which buckets became empty.
+ */
+int
+token_bucket_rw_dec(token_bucket_rw_t *bucket,
+                    ssize_t n_read, ssize_t n_written)
+{
+  int flags = 0;
+  if (token_bucket_rw_dec_read(bucket, n_read))
+    flags |= TB_READ;
+  if (token_bucket_rw_dec_write(bucket, n_written))
+    flags |= TB_WRITE;
+  return flags;
+}
+
diff -pruN 0.3.3.9-1/src/common/token_bucket.h 0.3.4.8-1/src/common/token_bucket.h
--- 0.3.3.9-1/src/common/token_bucket.h	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.4.8-1/src/common/token_bucket.h	2018-06-15 21:20:53.000000000 +0000
@@ -0,0 +1,118 @@
+/* Copyright (c) 2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file token_bucket_rw.h
+ * \brief Headers for token_bucket_rw.c
+ **/
+
+#ifndef TOR_TOKEN_BUCKET_H
+#define TOR_TOKEN_BUCKET_H
+
+#include "torint.h"
+#include "testsupport.h"
+
+/** Largest allowable burst value for a token buffer. */
+#define TOKEN_BUCKET_MAX_BURST INT32_MAX
+
+/** A generic token buffer configuration: determines the number of tokens
+ * added to the bucket in each time unit (the "rate"), and the maximum number
+ * of tokens in the bucket (the "burst") */
+typedef struct token_bucket_cfg_t {
+  uint32_t rate;
+  int32_t burst;
+} token_bucket_cfg_t;
+
+/** A raw token bucket, decoupled from its configuration and timestamp. */
+typedef struct token_bucket_raw_t {
+  int32_t bucket;
+} token_bucket_raw_t;
+
+void token_bucket_cfg_init(token_bucket_cfg_t *cfg,
+                           uint32_t rate,
+                           uint32_t burst);
+
+void token_bucket_raw_adjust(token_bucket_raw_t *bucket,
+                             const token_bucket_cfg_t *cfg);
+
+void token_bucket_raw_reset(token_bucket_raw_t *bucket,
+                            const token_bucket_cfg_t *cfg);
+
+int token_bucket_raw_dec(token_bucket_raw_t *bucket,
+                         ssize_t n);
+
+int token_bucket_raw_refill_steps(token_bucket_raw_t *bucket,
+                                  const token_bucket_cfg_t *cfg,
+                                  const uint32_t elapsed_steps);
+
+static inline size_t token_bucket_raw_get(const token_bucket_raw_t *bucket);
+/** Return the current number of bytes set in a token bucket. */
+static inline size_t
+token_bucket_raw_get(const token_bucket_raw_t *bucket)
+{
+  return bucket->bucket >= 0 ? bucket->bucket : 0;
+}
+
+/** A convenience type containing all the pieces needed for a coupled
+ * read-bucket and write-bucket that have the same rate limit, and which use
+ * "timestamp units" (see compat_time.h) for their time. */
+typedef struct token_bucket_rw_t {
+  token_bucket_cfg_t cfg;
+  token_bucket_raw_t read_bucket;
+  token_bucket_raw_t write_bucket;
+  uint32_t last_refilled_at_timestamp;
+} token_bucket_rw_t;
+
+void token_bucket_rw_init(token_bucket_rw_t *bucket,
+                          uint32_t rate,
+                          uint32_t burst,
+                          uint32_t now_ts);
+
+void token_bucket_rw_adjust(token_bucket_rw_t *bucket,
+                            uint32_t rate, uint32_t burst);
+
+void token_bucket_rw_reset(token_bucket_rw_t *bucket,
+                           uint32_t now_ts);
+
+#define TB_READ 1
+#define TB_WRITE 2
+
+int token_bucket_rw_refill(token_bucket_rw_t *bucket,
+                           uint32_t now_ts);
+
+int token_bucket_rw_dec_read(token_bucket_rw_t *bucket,
+                             ssize_t n);
+int token_bucket_rw_dec_write(token_bucket_rw_t *bucket,
+                              ssize_t n);
+
+int token_bucket_rw_dec(token_bucket_rw_t *bucket,
+                        ssize_t n_read, ssize_t n_written);
+
+static inline size_t token_bucket_rw_get_read(const token_bucket_rw_t *bucket);
+static inline size_t
+token_bucket_rw_get_read(const token_bucket_rw_t *bucket)
+{
+  return token_bucket_raw_get(&bucket->read_bucket);
+}
+
+static inline size_t token_bucket_rw_get_write(
+                                            const token_bucket_rw_t *bucket);
+static inline size_t
+token_bucket_rw_get_write(const token_bucket_rw_t *bucket)
+{
+  return token_bucket_raw_get(&bucket->write_bucket);
+}
+
+#ifdef TOKEN_BUCKET_PRIVATE
+
+/* To avoid making the rates too small, we consider units of "steps",
+ * where a "step" is defined as this many timestamp ticks.  Keep this
+ * a power of two if you can. */
+#define TICKS_PER_STEP 16
+
+STATIC uint32_t rate_per_sec_to_rate_per_step(uint32_t rate);
+
+#endif
+
+#endif /* TOR_TOKEN_BUCKET_H */
+
diff -pruN 0.3.3.9-1/src/common/torint.h 0.3.4.8-1/src/common/torint.h
--- 0.3.3.9-1/src/common/torint.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/torint.h	2018-06-15 21:20:53.000000000 +0000
@@ -40,6 +40,8 @@
 #include <inttypes.h>
 #endif
 
+#include <stdbool.h>
+
 #if (SIZEOF_INT8_T != 0)
 #define HAVE_INT8_T
 #endif
diff -pruN 0.3.3.9-1/src/common/torlog.h 0.3.4.8-1/src/common/torlog.h
--- 0.3.3.9-1/src/common/torlog.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/torlog.h	2018-06-15 21:20:53.000000000 +0000
@@ -154,6 +154,8 @@ int add_android_log(const log_severity_l
                     const char *android_identity_tag);
 #endif // HAVE_ANDROID_LOG_H.
 int add_callback_log(const log_severity_list_t *severity, log_callback cb);
+typedef void (*pending_callback_callback)(void);
+void logs_set_pending_callback_callback(pending_callback_callback cb);
 void logs_set_domain_logging(int enabled);
 int get_min_log_level(void);
 void switch_logs_debug(void);
@@ -191,6 +193,10 @@ void log_fn_ratelim_(struct ratelim_t *r
                      const char *format, ...)
   CHECK_PRINTF(5,6);
 
+int log_message_is_interesting(int severity, log_domain_mask_t domain);
+void tor_log_string(int severity, log_domain_mask_t domain,
+                    const char *function, const char *string);
+
 #if defined(__GNUC__) && __GNUC__ <= 3
 
 /* These are the GCC varidaic macros, so that older versions of GCC don't
@@ -248,6 +254,16 @@ void log_fn_ratelim_(struct ratelim_t *r
                   args, ##__VA_ARGS__)
 #endif /* defined(__GNUC__) && __GNUC__ <= 3 */
 
+/** This defines log levels that are linked in the Rust log module, rather
+ * than re-defining these in both Rust and C.
+ *
+ * C_RUST_COUPLED src/rust/tor_log LogSeverity, LogDomain
+ */
+extern const int LOG_WARN_;
+extern const int LOG_NOTICE_;
+extern const log_domain_mask_t LD_NET_;
+extern const log_domain_mask_t LD_GENERAL_;
+
 #ifdef LOG_PRIVATE
 MOCK_DECL(STATIC void, logv, (int severity, log_domain_mask_t domain,
     const char *funcname, const char *suffix, const char *format,
diff -pruN 0.3.3.9-1/src/common/tortls.c 0.3.4.8-1/src/common/tortls.c
--- 0.3.3.9-1/src/common/tortls.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/tortls.c	2018-09-07 13:15:56.000000000 +0000
@@ -25,6 +25,9 @@
   #include <ws2tcpip.h>
 #endif
 
+#include "crypto.h"
+#include "crypto_rand.h"
+#include "crypto_util.h"
 #include "compat.h"
 
 /* Some versions of OpenSSL declare SSL_get_selected_srtp_profile twice in
@@ -32,7 +35,6 @@
 DISABLE_GCC_WARNING(redundant-decls)
 
 #include <openssl/opensslv.h>
-#include "crypto.h"
 
 #ifdef OPENSSL_NO_EC
 #error "We require OpenSSL with ECC support"
@@ -56,10 +58,25 @@ ENABLE_GCC_WARNING(redundant-decls)
 #include "container.h"
 #include <string.h>
 
+#ifdef OPENSSL_1_1_API
+#define X509_get_notBefore_const(cert) \
+    X509_get0_notBefore(cert)
+#define X509_get_notAfter_const(cert) \
+    X509_get0_notAfter(cert)
+#ifndef X509_get_notBefore
+#define X509_get_notBefore(cert) \
+    X509_getm_notBefore(cert)
+#endif
+#ifndef X509_get_notAfter
+#define X509_get_notAfter(cert) \
+    X509_getm_notAfter(cert)
+#endif
+#else /* ! OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,1,0) */
 #define X509_get_notBefore_const(cert) \
   ((const ASN1_TIME*) X509_get_notBefore((X509 *)cert))
 #define X509_get_notAfter_const(cert) \
   ((const ASN1_TIME*) X509_get_notAfter((X509 *)cert))
+#endif
 
 /* Copied from or.h */
 #define LEGAL_NICKNAME_CHARACTERS \
@@ -355,8 +372,12 @@ tor_tls_init(void)
   check_no_tls_errors();
 
   if (!tls_library_is_initialized) {
+#ifdef OPENSSL_1_1_API
+    OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
+#else
     SSL_library_init();
     SSL_load_error_strings();
+#endif
 
 #if (SIZEOF_VOID_P >= 8 &&                              \
      OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,1))
@@ -896,18 +917,20 @@ tor_tls_cert_get_key(tor_x509_cert_t *ce
 MOCK_IMPL(int,
 tor_tls_cert_matches_key,(const tor_tls_t *tls, const tor_x509_cert_t *cert))
 {
-  X509 *peercert = SSL_get_peer_certificate(tls->ssl);
+  tor_x509_cert_t *peer = tor_tls_get_peer_cert((tor_tls_t *)tls);
+  if (!peer)
+    return 0;
+
+  X509 *peercert = peer->cert;
   EVP_PKEY *link_key = NULL, *cert_key = NULL;
   int result;
 
-  if (!peercert)
-    return 0;
   link_key = X509_get_pubkey(peercert);
   cert_key = X509_get_pubkey(cert->cert);
 
   result = link_key && cert_key && EVP_PKEY_cmp(cert_key, link_key) == 1;
 
-  X509_free(peercert);
+  tor_x509_cert_free(peer);
   if (link_key)
     EVP_PKEY_free(link_key);
   if (cert_key)
@@ -1170,6 +1193,12 @@ tor_tls_context_new(crypto_pk_t *identit
   if (!(result->ctx = SSL_CTX_new(SSLv23_method())))
     goto error;
 #endif /* defined(HAVE_TLS_METHOD) */
+
+#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL
+  /* Level 1 re-enables RSA1024 and DH1024 for compatibility with old tors */
+  SSL_CTX_set_security_level(result->ctx, 1);
+#endif
+
   SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2);
   SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv3);
 
@@ -2639,4 +2668,3 @@ evaluate_ecgroup_for_tls(const char *ecg
 
   return ret;
 }
-
diff -pruN 0.3.3.9-1/src/common/tortls.h 0.3.4.8-1/src/common/tortls.h
--- 0.3.3.9-1/src/common/tortls.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/tortls.h	2018-06-15 21:20:53.000000000 +0000
@@ -11,7 +11,7 @@
  * \brief Headers for tortls.c
  **/
 
-#include "crypto.h"
+#include "crypto_rsa.h"
 #include "compat_openssl.h"
 #include "compat.h"
 #include "testsupport.h"
diff -pruN 0.3.3.9-1/src/common/util.c 0.3.4.8-1/src/common/util.c
--- 0.3.3.9-1/src/common/util.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/util.c	2018-06-21 12:38:21.000000000 +0000
@@ -16,7 +16,7 @@
 #define UTIL_PRIVATE
 #include "util.h"
 #include "torlog.h"
-#include "crypto.h"
+#include "crypto_digest.h"
 #include "torint.h"
 #include "container.h"
 #include "address.h"
@@ -572,6 +572,19 @@ add_laplace_noise(int64_t signal_, doubl
     return signal_ + noise;
 }
 
+/* Helper: safely add two uint32_t's, capping at UINT32_MAX rather
+ * than overflow */
+uint32_t
+tor_add_u32_nowrap(uint32_t a, uint32_t b)
+{
+  /* a+b > UINT32_MAX check, without overflow */
+  if (PREDICT_UNLIKELY(a > UINT32_MAX - b)) {
+    return UINT32_MAX;
+  } else {
+    return a+b;
+  }
+}
+
 /* Helper: return greatest common divisor of a,b */
 static uint64_t
 gcd64(uint64_t a, uint64_t b)
@@ -1821,6 +1834,15 @@ format_iso_time(char *buf, time_t t)
   strftime(buf, ISO_TIME_LEN+1, "%Y-%m-%d %H:%M:%S", tor_gmtime_r(&t, &tm));
 }
 
+/** As format_local_iso_time, but use the yyyy-mm-ddThh:mm:ss format to avoid
+ * embedding an internal space. */
+void
+format_local_iso_time_nospace(char *buf, time_t t)
+{
+  format_local_iso_time(buf, t);
+  buf[10] = 'T';
+}
+
 /** As format_iso_time, but use the yyyy-mm-ddThh:mm:ss format to avoid
  * embedding an internal space. */
 void
@@ -4779,8 +4801,8 @@ process_environment_t *
 process_environment_make(struct smartlist_t *env_vars)
 {
   process_environment_t *env = tor_malloc_zero(sizeof(process_environment_t));
-  size_t n_env_vars = smartlist_len(env_vars);
-  size_t i;
+  int n_env_vars = smartlist_len(env_vars);
+  int i;
   size_t total_env_length;
   smartlist_t *env_vars_sorted;
 
@@ -5111,30 +5133,6 @@ stream_status_to_string(enum stream_stat
   }
 }
 
-/* DOCDOC */
-static void
-log_portfw_spawn_error_message(const char *buf,
-                               const char *executable, int *child_status)
-{
-  /* Parse error message */
-  int retval, child_state, saved_errno;
-  retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
-                      &child_state, &saved_errno);
-  if (retval == 2) {
-    log_warn(LD_GENERAL,
-             "Failed to start child process \"%s\" in state %d: %s",
-             executable, child_state, strerror(saved_errno));
-    if (child_status)
-      *child_status = 1;
-  } else {
-    /* Failed to parse message from child process, log it as a
-       warning */
-    log_warn(LD_GENERAL,
-             "Unexpected message from port forwarding helper \"%s\": %s",
-             executable, buf);
-  }
-}
-
 #ifdef _WIN32
 
 /** Return a smartlist containing lines outputted from
@@ -5180,51 +5178,6 @@ tor_get_lines_from_handle, (HANDLE *hand
   return lines;
 }
 
-/** Read from stream, and send lines to log at the specified log level.
- * Returns -1 if there is a error reading, and 0 otherwise.
- * If the generated stream is flushed more often than on new lines, or
- * a read exceeds 256 bytes, lines will be truncated. This should be fixed,
- * along with the corresponding problem on *nix (see bug #2045).
- */
-static int
-log_from_handle(HANDLE *pipe, int severity)
-{
-  char buf[256];
-  int pos;
-  smartlist_t *lines;
-
-  pos = tor_read_all_handle(pipe, buf, sizeof(buf) - 1, NULL);
-  if (pos < 0) {
-    /* Error */
-    log_warn(LD_GENERAL, "Failed to read data from subprocess");
-    return -1;
-  }
-
-  if (0 == pos) {
-    /* There's nothing to read (process is busy or has exited) */
-    log_debug(LD_GENERAL, "Subprocess had nothing to say");
-    return 0;
-  }
-
-  /* End with a null even if there isn't a \r\n at the end */
-  /* TODO: What if this is a partial line? */
-  buf[pos] = '\0';
-  log_debug(LD_GENERAL, "Subprocess had %d bytes to say", pos);
-
-  /* Split up the buffer */
-  lines = smartlist_new();
-  tor_split_lines(lines, buf, pos);
-
-  /* Log each line */
-  SMARTLIST_FOREACH(lines, char *, line,
-  {
-    log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", line);
-  });
-  smartlist_free(lines);
-
-  return 0;
-}
-
 #else /* !(defined(_WIN32)) */
 
 /** Return a smartlist containing lines outputted from
@@ -5254,42 +5207,6 @@ tor_get_lines_from_handle, (int fd, enum
   return lines;
 }
 
-/** Read from fd, and send lines to log at the specified log level.
- * Returns 1 if stream is closed normally, -1 if there is a error reading, and
- * 0 otherwise. Handles lines from tor-fw-helper and
- * tor_spawn_background() specially.
- */
-static int
-log_from_pipe(int fd, int severity, const char *executable,
-              int *child_status)
-{
-  char buf[256];
-  enum stream_status r;
-
-  for (;;) {
-    r = get_string_from_pipe(fd, buf, sizeof(buf) - 1);
-
-    if (r == IO_STREAM_CLOSED) {
-      return 1;
-    } else if (r == IO_STREAM_EAGAIN) {
-      return 0;
-    } else if (r == IO_STREAM_TERM) {
-      return -1;
-    }
-
-    tor_assert(r == IO_STREAM_OKAY);
-
-    /* Check if buf starts with SPAWN_ERROR_MESSAGE */
-    if (strcmpstart(buf, SPAWN_ERROR_MESSAGE) == 0) {
-      log_portfw_spawn_error_message(buf, executable, child_status);
-    } else {
-      log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", buf);
-    }
-  }
-
-  /* We should never get here */
-  return -1;
-}
 #endif /* defined(_WIN32) */
 
 /** Reads from <b>fd</b> and stores input in <b>buf_out</b> making
@@ -5332,294 +5249,6 @@ get_string_from_pipe(int fd, char *buf_o
   return IO_STREAM_OKAY;
 }
 
-/** Parse a <b>line</b> from tor-fw-helper and issue an appropriate
- *  log message to our user. */
-static void
-handle_fw_helper_line(const char *executable, const char *line)
-{
-  smartlist_t *tokens = smartlist_new();
-  char *message = NULL;
-  char *message_for_log = NULL;
-  const char *external_port = NULL;
-  const char *internal_port = NULL;
-  const char *result = NULL;
-  int port = 0;
-  int success = 0;
-
-  if (strcmpstart(line, SPAWN_ERROR_MESSAGE) == 0) {
-    /* We need to check for SPAWN_ERROR_MESSAGE again here, since it's
-     * possible that it got sent after we tried to read it in log_from_pipe.
-     *
-     * XXX Ideally, we should be using one of stdout/stderr for the real
-     * output, and one for the output of the startup code.  We used to do that
-     * before cd05f35d2c.
-     */
-    int child_status;
-    log_portfw_spawn_error_message(line, executable, &child_status);
-    goto done;
-  }
-
-  smartlist_split_string(tokens, line, NULL,
-                         SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
-
-  if (smartlist_len(tokens) < 5)
-    goto err;
-
-  if (strcmp(smartlist_get(tokens, 0), "tor-fw-helper") ||
-      strcmp(smartlist_get(tokens, 1), "tcp-forward"))
-    goto err;
-
-  external_port = smartlist_get(tokens, 2);
-  internal_port = smartlist_get(tokens, 3);
-  result = smartlist_get(tokens, 4);
-
-  if (smartlist_len(tokens) > 5) {
-    /* If there are more than 5 tokens, they are part of [<message>].
-       Let's use a second smartlist to form the whole message;
-       strncat loops suck. */
-    int i;
-    int message_words_n = smartlist_len(tokens) - 5;
-    smartlist_t *message_sl = smartlist_new();
-    for (i = 0; i < message_words_n; i++)
-      smartlist_add(message_sl, smartlist_get(tokens, 5+i));
-
-    tor_assert(smartlist_len(message_sl) > 0);
-    message = smartlist_join_strings(message_sl, " ", 0, NULL);
-
-    /* wrap the message in log-friendly wrapping */
-    tor_asprintf(&message_for_log, " ('%s')", message);
-
-    smartlist_free(message_sl);
-  }
-
-  port = atoi(external_port);
-  if (port < 1 || port > 65535)
-    goto err;
-
-  port = atoi(internal_port);
-  if (port < 1 || port > 65535)
-    goto err;
-
-  if (!strcmp(result, "SUCCESS"))
-    success = 1;
-  else if (!strcmp(result, "FAIL"))
-    success = 0;
-  else
-    goto err;
-
-  if (!success) {
-    log_warn(LD_GENERAL, "Tor was unable to forward TCP port '%s' to '%s'%s. "
-             "Please make sure that your router supports port "
-             "forwarding protocols (like NAT-PMP). Note that if '%s' is "
-             "your ORPort, your relay will be unable to receive inbound "
-             "traffic.", external_port, internal_port,
-             message_for_log ? message_for_log : "",
-             internal_port);
-  } else {
-    log_info(LD_GENERAL,
-             "Tor successfully forwarded TCP port '%s' to '%s'%s.",
-             external_port, internal_port,
-             message_for_log ? message_for_log : "");
-  }
-
-  goto done;
-
- err:
-  log_warn(LD_GENERAL, "tor-fw-helper sent us a string we could not "
-           "parse (%s).", line);
-
- done:
-  SMARTLIST_FOREACH(tokens, char *, cp, tor_free(cp));
-  smartlist_free(tokens);
-  tor_free(message);
-  tor_free(message_for_log);
-}
-
-/** Read what tor-fw-helper has to say in its stdout and handle it
- *  appropriately */
-static int
-handle_fw_helper_output(const char *executable,
-                        process_handle_t *process_handle)
-{
-  smartlist_t *fw_helper_output = NULL;
-  enum stream_status stream_status = 0;
-
-  fw_helper_output =
-    tor_get_lines_from_handle(tor_process_get_stdout_pipe(process_handle),
-                              &stream_status);
-  if (!fw_helper_output) { /* didn't get any output from tor-fw-helper */
-    /* if EAGAIN we should retry in the future */
-    return (stream_status == IO_STREAM_EAGAIN) ? 0 : -1;
-  }
-
-  /* Handle the lines we got: */
-  SMARTLIST_FOREACH_BEGIN(fw_helper_output, char *, line) {
-    handle_fw_helper_line(executable, line);
-    tor_free(line);
-  } SMARTLIST_FOREACH_END(line);
-
-  smartlist_free(fw_helper_output);
-
-  return 0;
-}
-
-/** Spawn tor-fw-helper and ask it to forward the ports in
- *  <b>ports_to_forward</b>. <b>ports_to_forward</b> contains strings
- *  of the form "<external port>:<internal port>", which is the format
- *  that tor-fw-helper expects. */
-void
-tor_check_port_forwarding(const char *filename,
-                          smartlist_t *ports_to_forward,
-                          time_t now)
-{
-/* When fw-helper succeeds, how long do we wait until running it again */
-#define TIME_TO_EXEC_FWHELPER_SUCCESS 300
-/* When fw-helper failed to start, how long do we wait until running it again
- */
-#define TIME_TO_EXEC_FWHELPER_FAIL 60
-
-  /* Static variables are initialized to zero, so child_handle.status=0
-   * which corresponds to it not running on startup */
-  static process_handle_t *child_handle=NULL;
-
-  static time_t time_to_run_helper = 0;
-  int stderr_status, retval;
-  int stdout_status = 0;
-
-  tor_assert(filename);
-
-  /* Start the child, if it is not already running */
-  if ((!child_handle || child_handle->status != PROCESS_STATUS_RUNNING) &&
-      time_to_run_helper < now) {
-    /*tor-fw-helper cli looks like this: tor_fw_helper -p :5555 -p 4555:1111 */
-    const char **argv; /* cli arguments */
-    int args_n, status;
-    int argv_index = 0; /* index inside 'argv' */
-
-    tor_assert(smartlist_len(ports_to_forward) > 0);
-
-    /* check for overflow during 'argv' allocation:
-       (len(ports_to_forward)*2 + 2)*sizeof(char*) > SIZE_MAX ==
-       len(ports_to_forward) > (((SIZE_MAX/sizeof(char*)) - 2)/2) */
-    if ((size_t) smartlist_len(ports_to_forward) >
-        (((SIZE_MAX/sizeof(char*)) - 2)/2)) {
-      log_warn(LD_GENERAL,
-               "Overflow during argv allocation. This shouldn't happen.");
-      return;
-    }
-    /* check for overflow during 'argv_index' increase:
-       ((len(ports_to_forward)*2 + 2) > INT_MAX) ==
-       len(ports_to_forward) > (INT_MAX - 2)/2 */
-    if (smartlist_len(ports_to_forward) > (INT_MAX - 2)/2) {
-      log_warn(LD_GENERAL,
-               "Overflow during argv_index increase. This shouldn't happen.");
-      return;
-    }
-
-    /* Calculate number of cli arguments: one for the filename, two
-       for each smartlist element (one for "-p" and one for the
-       ports), and one for the final NULL. */
-    args_n = 1 + 2*smartlist_len(ports_to_forward) + 1;
-    argv = tor_calloc(args_n, sizeof(char *));
-
-    argv[argv_index++] = filename;
-    SMARTLIST_FOREACH_BEGIN(ports_to_forward, const char *, port) {
-      argv[argv_index++] = "-p";
-      argv[argv_index++] = port;
-    } SMARTLIST_FOREACH_END(port);
-    argv[argv_index] = NULL;
-
-    /* Assume tor-fw-helper will succeed, start it later*/
-    time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_SUCCESS;
-
-    if (child_handle) {
-      tor_process_handle_destroy(child_handle, 1);
-      child_handle = NULL;
-    }
-
-#ifdef _WIN32
-    /* Passing NULL as lpApplicationName makes Windows search for the .exe */
-    status = tor_spawn_background(NULL, argv, NULL, &child_handle);
-#else
-    status = tor_spawn_background(filename, argv, NULL, &child_handle);
-#endif /* defined(_WIN32) */
-
-    tor_free_((void*)argv);
-    argv=NULL;
-
-    if (PROCESS_STATUS_ERROR == status) {
-      log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
-              filename);
-      time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
-      return;
-    }
-
-    log_info(LD_GENERAL,
-             "Started port forwarding helper (%s) with pid '%d'",
-             filename, tor_process_get_pid(child_handle));
-  }
-
-  /* If child is running, read from its stdout and stderr) */
-  if (child_handle && PROCESS_STATUS_RUNNING == child_handle->status) {
-    /* Read from stdout/stderr and log result */
-    retval = 0;
-#ifdef _WIN32
-    stderr_status = log_from_handle(child_handle->stderr_pipe, LOG_INFO);
-#else
-    stderr_status = log_from_pipe(child_handle->stderr_pipe,
-                                  LOG_INFO, filename, &retval);
-#endif /* defined(_WIN32) */
-    if (handle_fw_helper_output(filename, child_handle) < 0) {
-      log_warn(LD_GENERAL, "Failed to handle fw helper output.");
-      stdout_status = -1;
-      retval = -1;
-    }
-
-    if (retval) {
-      /* There was a problem in the child process */
-      time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
-    }
-
-    /* Combine the two statuses in order of severity */
-    if (-1 == stdout_status || -1 == stderr_status)
-      /* There was a failure */
-      retval = -1;
-#ifdef _WIN32
-    else if (!child_handle || tor_get_exit_code(child_handle, 0, NULL) !=
-             PROCESS_EXIT_RUNNING) {
-      /* process has exited or there was an error */
-      /* TODO: Do something with the process return value */
-      /* TODO: What if the process output something since
-       * between log_from_handle and tor_get_exit_code? */
-      retval = 1;
-    }
-#else /* !(defined(_WIN32)) */
-    else if (1 == stdout_status || 1 == stderr_status)
-      /* stdout or stderr was closed, the process probably
-       * exited. It will be reaped by waitpid() in main.c */
-      /* TODO: Do something with the process return value */
-      retval = 1;
-#endif /* defined(_WIN32) */
-    else
-      /* Both are fine */
-      retval = 0;
-
-    /* If either pipe indicates a failure, act on it */
-    if (0 != retval) {
-      if (1 == retval) {
-        log_info(LD_GENERAL, "Port forwarding helper terminated");
-        child_handle->status = PROCESS_STATUS_NOTRUNNING;
-      } else {
-        log_warn(LD_GENERAL, "Failed to read from port forwarding helper");
-        child_handle->status = PROCESS_STATUS_ERROR;
-      }
-
-      /* TODO: The child might not actually be finished (maybe it failed or
-         closed stdout/stderr), so maybe we shouldn't start another? */
-    }
-  }
-}
-
 /** Initialize the insecure RNG <b>rng</b> from a seed value <b>seed</b>. */
 void
 tor_init_weak_random(tor_weak_rng_t *rng, unsigned seed)
diff -pruN 0.3.3.9-1/src/common/util.h 0.3.4.8-1/src/common/util.h
--- 0.3.3.9-1/src/common/util.h	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/util.h	2018-06-15 21:20:53.000000000 +0000
@@ -73,9 +73,9 @@ extern int dmalloc_free(const char *file
     }                                               \
   STMT_END
 #else /* !(defined(USE_DMALLOC)) */
-/** Release memory allocated by tor_malloc, tor_realloc, tor_strdup, etc.
- * Unlike the free() function, tor_free() will still work on NULL pointers,
- * and it sets the pointer value to NULL after freeing it.
+/** Release memory allocated by tor_malloc, tor_realloc, tor_strdup,
+ * etc.  Unlike the free() function, the tor_free() macro sets the
+ * pointer value to NULL after freeing it.
  *
  * This is a macro.  If you need a function pointer to release memory from
  * tor_malloc(), use tor_free_().
@@ -88,17 +88,13 @@ extern int dmalloc_free(const char *file
 #ifdef __GNUC__
 #define tor_free(p) STMT_BEGIN                                 \
     typeof(&(p)) tor_free__tmpvar = &(p);                      \
-    if (PREDICT_LIKELY((*tor_free__tmpvar)!=NULL)) {           \
-      raw_free(*tor_free__tmpvar);                             \
-      *tor_free__tmpvar=NULL;                                  \
-    }                                                          \
+    raw_free(*tor_free__tmpvar);                               \
+    *tor_free__tmpvar=NULL;                                    \
   STMT_END
 #else
 #define tor_free(p) STMT_BEGIN                                 \
-    if (PREDICT_LIKELY((p)!=NULL)) {                           \
-      raw_free(p);                                             \
-      (p)=NULL;                                                \
-    }                                                          \
+  raw_free(p);                                                 \
+  (p)=NULL;                                                    \
   STMT_END
 #endif
 #endif /* defined(USE_DMALLOC) */
@@ -180,6 +176,8 @@ int n_bits_set_u8(uint8_t v);
 int64_t clamp_double_to_int64(double number);
 void simplify_fraction64(uint64_t *numer, uint64_t *denom);
 
+uint32_t tor_add_u32_nowrap(uint32_t a, uint32_t b);
+
 /* Compute the CEIL of <b>a</b> divided by <b>b</b>, for nonnegative <b>a</b>
  * and positive <b>b</b>.  Works on integer types only. Not defined if a+(b-1)
  * can overflow. */
@@ -273,6 +271,7 @@ int parse_rfc1123_time(const char *buf,
 #define ISO_TIME_USEC_LEN (ISO_TIME_LEN+7)
 void format_local_iso_time(char *buf, time_t t);
 void format_iso_time(char *buf, time_t t);
+void format_local_iso_time_nospace(char *buf, time_t t);
 void format_iso_time_nospace(char *buf, time_t t);
 void format_iso_time_nospace_usec(char *buf, const struct timeval *tv);
 int parse_iso_time_(const char *cp, time_t *t, int strict, int nospace);
@@ -418,11 +417,6 @@ void start_daemon(void);
 void finish_daemon(const char *desired_cwd);
 int write_pidfile(const char *filename);
 
-/* Port forwarding */
-void tor_check_port_forwarding(const char *filename,
-                               struct smartlist_t *ports_to_forward,
-                               time_t now);
-
 void tor_disable_spawning_background_processes(void);
 
 typedef struct process_handle_t process_handle_t;
@@ -461,9 +455,7 @@ void set_environment_variable_in_smartli
                                            void (*free_old)(void*),
                                            int free_p);
 
-/* Values of process_handle_t.status. PROCESS_STATUS_NOTRUNNING must be
- * 0 because tor_check_port_forwarding depends on this being the initial
- * statue of the static instance of process_handle_t */
+/* Values of process_handle_t.status. */
 #define PROCESS_STATUS_NOTRUNNING 0
 #define PROCESS_STATUS_RUNNING 1
 #define PROCESS_STATUS_ERROR -1
diff -pruN 0.3.3.9-1/src/common/workqueue.c 0.3.4.8-1/src/common/workqueue.c
--- 0.3.3.9-1/src/common/workqueue.c	2018-07-13 18:25:23.000000000 +0000
+++ 0.3.4.8-1/src/common/workqueue.c	2018-06-15 21:20:53.000000000 +0000
@@ -1,3 +1,4 @@
+
 /* copyright (c) 2013-2015, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
@@ -24,13 +25,16 @@
 
 #include "orconfig.h"
 #include "compat.h"
+#include "compat_libevent.h"
 #include "compat_threads.h"
-#include "crypto.h"
+#include "crypto_rand.h"
 #include "util.h"
 #include "workqueue.h"
 #include "tor_queue.h"
 #include "torlog.h"
 
+#include <event2/event.h>
+
 #define WORKQUEUE_PRIORITY_FIRST WQ_PRI_HIGH
 #define WORKQUEUE_PRIORITY_LAST WQ_PRI_LOW
 #define WORKQUEUE_N_PRIORITIES (((int) WORKQUEUE_PRIORITY_LAST)+1)
@@ -63,6 +67,9 @@ struct threadpool_s {
   void (*free_update_arg_fn)(void *);
   /** Array of n_threads update arguments. */
   void **update_args;
+  /** Event to notice when another thread has sent a reply. */
+  struct event *reply_event;
+  void (*reply_cb)(threadpool_t *);
 
   /** Number of elements in threads. */
   int n_threads;
@@ -597,15 +604,41 @@ replyqueue_new(uint32_t alertsocks_flags
   return rq;
 }
 
-/**
- * Return the "read socket" for a given reply queue.  The main thread should
- * listen for read events on this socket, and call replyqueue_process() every
- * time it triggers.
+/** Internal: Run from the libevent mainloop when there is work to handle in
+ * the reply queue handler. */
+static void
+reply_event_cb(evutil_socket_t sock, short events, void *arg)
+{
+  threadpool_t *tp = arg;
+  (void) sock;
+  (void) events;
+  replyqueue_process(tp->reply_queue);
+  if (tp->reply_cb)
+    tp->reply_cb(tp);
+}
+
+/** Register the threadpool <b>tp</b>'s reply queue with the libevent
+ * mainloop of <b>base</b>. If <b>tp</b> is provided, it is run after
+ * each time there is work to process from the reply queue. Return 0 on
+ * success, -1 on failure.
  */
-tor_socket_t
-replyqueue_get_socket(replyqueue_t *rq)
+int
+threadpool_register_reply_event(threadpool_t *tp,
+                                void (*cb)(threadpool_t *tp))
 {
-  return rq->alert.read_fd;
+  struct event_base *base = tor_libevent_get_base();
+
+  if (tp->reply_event) {
+    tor_event_free(tp->reply_event);
+  }
+  tp->reply_event = tor_event_new(base,
+                                  tp->reply_queue->alert.read_fd,
+                                  EV_READ|EV_PERSIST,
+                                  reply_event_cb,
+                                  tp);
+  tor_assert(tp->reply_event);
+  tp->reply_cb = cb;
+  return event_add(tp->reply_event, NULL);
 }
 
 /**
diff -pruN 0.3.3.9-1/src/common/workqueue.h 0.3.4.8-1/src/common/workqueue.h
--- 0.3.3.9-1/src/common/workqueue.h	2018-07-13 18:17:34.000000000 +0000
+++ 0.3.4.8-1/src/common/workqueue.h	2018-06-15 21:20:53.000000000 +0000
@@ -56,8 +56,11 @@ threadpool_t *threadpool_new(int n_threa
 replyqueue_t *threadpool_get_replyqueue(threadpool_t *tp);
 
 replyqueue_t *replyqueue_new(uint32_t alertsocks_flags);
-tor_socket_t replyqueue_get_socket(replyqueue_t *rq);
 void replyqueue_process(replyqueue_t *queue);
 
+struct event_base;
+int threadpool_register_reply_event(threadpool_t *tp,
+                                    void (*cb)(threadpool_t *tp));
+
 #endif /* !defined(TOR_WORKQUEUE_H) */
 
diff -pruN 0.3.3.9-1/src/config/geoip 0.3.4.8-1/src/config/geoip
--- 0.3.3.9-1/src/config/geoip	2018-07-13 00:22:24.000000000 +0000
+++ 0.3.4.8-1/src/config/geoip	2018-08-15 06:16:23.000000000 +0000
@@ -1,4 +1,4 @@
-# Last updated based on July 3 2018 Maxmind GeoLite2 Country
+# Last updated based on August 7 2018 Maxmind GeoLite2 Country
 # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
 # gunzip GeoLite2-Country.mmdb.gz
 # python mmdb-convert.py GeoLite2-Country.mmdb
@@ -101,6 +101,7 @@
 34636800,34637311,DE
 34646528,34647551,DE
 34648576,34649087,GR
+34651136,34651647,BR
 34659328,34660351,GR
 34673664,34674687,DE
 34733056,34734079,DE
@@ -177,7 +178,13 @@
 48234496,49283071,IT
 49283072,49807359,DE
 49807360,50329599,SE
-50331648,58195967,US
+50331648,50331648,US
+50331649,50462719,SG
+50462720,50855935,US
+50855936,51118079,GB
+51118080,57671679,US
+57671680,57933823,JP
+57933824,58195967,US
 58195968,58458111,DE
 58458112,68169727,US
 68169728,68171775,CA
@@ -185,11 +192,7 @@
 68194816,68194879,CA
 68194880,68200447,US
 68200448,68200703,CA
-68200704,68204031,US
-68204032,68204036,CU
-68204037,68204037,US
-68204038,68204159,CU
-68204160,68305407,US
+68200704,68305407,US
 68305408,68305919,MX
 68305920,68978687,US
 68978688,68980735,CA
@@ -278,7 +281,9 @@
 84557824,84566015,NL
 84566016,84574207,GB
 84574208,84576255,FR
-84576256,84582399,GB
+84576256,84578167,GB
+84578168,84578175,SE
+84578176,84582399,GB
 84582400,84590591,DE
 84590592,84591103,NL
 84591104,84591359,SG
@@ -577,7 +582,9 @@
 86453320,86453327,FR
 86453328,86453339,ES
 86453340,86453343,PT
-86453344,86453435,FR
+86453344,86453423,FR
+86453424,86453431,DE
+86453432,86453435,FR
 86453436,86453439,ES
 86453440,86453836,FR
 86453837,86453838,PT
@@ -646,8 +653,8 @@
 86457400,86457407,ES
 86457408,86457455,FR
 86457456,86457456,DE
-86457457,86457471,FR
-86457472,86457519,ES
+86457457,86457503,FR
+86457504,86457519,ES
 86457520,86457703,FR
 86457704,86457707,ES
 86457708,86457759,FR
@@ -757,8 +764,8 @@
 86487040,86489087,GB
 86489088,86491135,NL
 86491136,86493183,PL
-86493184,86493439,CZ
-86493440,86495231,RU
+86493184,86493695,CZ
+86493696,86495231,RU
 86495232,86497279,ES
 86497280,86499327,NL
 86499328,86503423,FR
@@ -1800,7 +1807,7 @@
 90719232,90719487,AT
 90719488,90719999,SE
 90720000,90720255,GB
-90720256,90721279,RU
+90720256,90721279,TR
 90721280,90722303,DE
 90722304,90724351,FI
 90724352,90726399,CH
@@ -2050,7 +2057,9 @@
 92744124,92744127,GB
 92744128,92744319,FR
 92744320,92744323,GB
-92744324,92744551,FR
+92744324,92744383,FR
+92744384,92744399,GB
+92744400,92744551,FR
 92744552,92744555,ES
 92744556,92744951,FR
 92744952,92744959,ES
@@ -2123,9 +2132,7 @@
 92753648,92753663,ES
 92753664,92754031,FR
 92754032,92754047,PT
-92754048,92754367,FR
-92754368,92754431,GB
-92754432,92754447,FR
+92754048,92754447,FR
 92754448,92754463,GB
 92754464,92754551,FR
 92754552,92754555,DE
@@ -2140,9 +2147,7 @@
 92755776,92755839,GB
 92755840,92757311,FR
 92757312,92757375,ES
-92757376,92758207,FR
-92758208,92758223,ES
-92758224,92758367,FR
+92757376,92758367,FR
 92758368,92758383,ES
 92758384,92758915,FR
 92758916,92758919,GB
@@ -2162,7 +2167,9 @@
 92761152,92761215,PT
 92761216,92761375,FR
 92761376,92761391,FI
-92761392,92762127,FR
+92761392,92761471,FR
+92761472,92761503,IE
+92761504,92762127,FR
 92762128,92762135,ES
 92762136,92762279,FR
 92762280,92762283,GB
@@ -2657,7 +2664,9 @@
 95420175,95420415,DE
 95420416,95551487,TR
 95551488,95555583,AZ
-95555584,95557631,GB
+95555584,95557159,GB
+95557160,95557167,NL
+95557168,95557631,GB
 95557632,95559679,RU
 95559680,95561727,NL
 95561728,95563007,IT
@@ -2668,9 +2677,7 @@
 95569920,95571967,SE
 95571968,95574015,RU
 95574016,95576063,IT
-95576064,95578624,GB
-95578625,95578879,US
-95578880,95580159,GB
+95576064,95580159,GB
 95580160,95582207,NL
 95582208,95584255,IT
 95584256,95617023,GE
@@ -2708,8 +2715,7 @@
 96224768,96225279,JP
 96225280,96228863,RU
 96228864,96229119,IE
-96229120,96229375,RU
-96229376,96230399,NL
+96229120,96230399,RU
 96230400,96231423,LU
 96231424,96234495,RU
 96234496,96235519,LU
@@ -2736,9 +2742,7 @@
 96261120,96261375,NL
 96261376,96262143,RU
 96262144,96262399,NL
-96262400,96264191,RU
-96264192,96265215,NL
-96265216,96265983,RU
+96262400,96265983,RU
 96265984,96266495,NL
 96266496,96266751,RU
 96266752,96267007,NL
@@ -2890,7 +2894,9 @@
 96764320,96764383,FR
 96764384,96764399,FI
 96764400,96764415,CZ
-96764416,96764859,FR
+96764416,96764639,FR
+96764640,96764655,PT
+96764656,96764859,FR
 96764860,96764863,CZ
 96764864,96765327,FR
 96765328,96765335,NL
@@ -3127,7 +3133,10 @@
 97452032,97517567,UA
 97517568,98566143,IR
 98566144,98697215,ES
-98697216,98701311,FR
+98697216,98697471,GB
+98697472,98697727,FR
+98697728,98699263,GB
+98699264,98701311,FR
 98701312,98705407,ES
 98705408,98707455,SE
 98707456,98709503,NL
@@ -3140,11 +3149,12 @@
 98738176,98740223,NO
 98740224,98740479,ES
 98740480,98740735,US
-98740736,98741247,DE
-98741248,98741503,ES
+98740736,98741503,ES
 98741504,98741759,US
-98741760,98742271,DE
-98742272,98744319,GB
+98741760,98742271,ES
+98742272,98743807,GB
+98743808,98744063,US
+98744064,98744319,GB
 98744320,98746367,ES
 98746368,98762751,TR
 98762752,98893823,RU
@@ -3415,9 +3425,9 @@
 136713984,136714031,GB
 136714032,136714047,US
 136714048,136714239,GB
-136714240,136810503,US
-136810504,136810504,DE
-136810505,139954241,US
+136714240,136810495,US
+136810496,136810751,DE
+136810752,139954241,US
 139954242,139954242,ES
 139954243,142606335,US
 142606336,146800639,SG
@@ -3455,7 +3465,9 @@
 214698312,214699007,US
 214699008,214700031,VI
 214700032,214777855,US
-214777856,214781951,PR
+214777856,214778879,PR
+214778880,214779903,US
+214779904,214781951,PR
 214781952,214783487,US
 214783488,214783999,PR
 214784000,214786047,US
@@ -4011,14 +4023,52 @@
 338018304,338026495,AU
 338026496,338051071,CH
 338051072,338059263,IE
-338059264,338073599,US
+338059264,338060799,US
+338060800,338061311,IE
+338061312,338061823,US
+338061824,338062335,GB
+338062336,338062847,NL
+338062848,338063359,US
+338063360,338063871,AU
+338063872,338073599,US
 338073600,338081791,CH
 338081792,338082815,US
 338082816,338083839,FR
 338083840,338100223,CH
-338100224,338120703,US
+338100224,338118655,US
+338118656,338120703,AU
 338120704,338124799,FR
-338124800,344260607,US
+338124800,338132991,AU
+338132992,338137087,CA
+338137088,338143231,GB
+338143232,338145279,KR
+338145280,338147327,JP
+338147328,338153471,KR
+338153472,338159615,GB
+338159616,338165759,FR
+338165760,338169855,IN
+338169856,338175999,BR
+338176000,338182143,IN
+338182144,338188287,AU
+338188288,338192383,JP
+338192384,338194431,GB
+338194432,338196479,BR
+338196480,338198527,AU
+338198528,338206719,FR
+338206720,338214911,AU
+338214912,338247679,US
+338247680,338264063,KR
+338264064,338280447,US
+338280448,338296831,IN
+338296832,338345983,US
+338345984,338362367,AU
+338362368,338370559,CA
+338370560,338378751,FR
+338378752,338386943,JP
+338386944,338393087,US
+338393088,338395135,IN
+338395136,338411519,SG
+338411520,344260607,US
 344260608,344260863,GB
 344260864,344261119,US
 344261120,344261778,GB
@@ -4151,21 +4201,25 @@
 386465792,386469887,NL
 386469888,386498559,US
 386498560,386502655,NL
-386502656,386656255,US
+386502656,386547711,US
+386547712,386551807,NL
+386551808,386656255,US
 386656256,386656511,NL
 386656512,386662399,US
 386662400,386666495,NL
 386666496,386682879,US
 386682880,386691071,NL
-386691072,386736127,US
-386736128,386740223,NL
-386740224,386774527,US
+386691072,386695167,US
+386695168,386699263,NL
+386699264,386736127,US
+386736128,386744319,NL
+386744320,386774527,US
 386774528,386775039,NL
 386775040,386789375,US
 386789376,386797567,NL
 386797568,386816511,US
-386816512,386818047,NL
-386818048,386826751,US
+386816512,386826239,NL
+386826240,386826751,US
 386826752,386827263,NL
 386827264,386828287,US
 386828288,386829311,NL
@@ -4179,8 +4233,13 @@
 386893312,386923519,US
 386923520,386924543,NL
 386924544,387055615,CA
-387055616,387121151,PR
-387121152,387648767,US
+387055616,387063807,US
+387063808,387096575,PR
+387096576,387100671,US
+387100672,387121151,PR
+387121152,387132143,US
+387132144,387132151,CA
+387132152,387648767,US
 387648768,387649023,DE
 387649024,387707903,US
 387707904,387708159,CH
@@ -4360,9 +4419,7 @@
 389447680,389451775,NL
 389451776,389455359,US
 389455360,389455615,NL
-389455616,389495295,US
-389495296,389495807,NL
-389495808,389517311,US
+389455616,389517311,US
 389517312,389521407,NL
 389521408,389554175,US
 389554176,389562367,NL
@@ -4428,8 +4485,7 @@
 389979190,389979190,AU
 389979191,389988351,US
 389988352,389992447,NL
-389992448,389996543,US
-389996544,389996799,NL
+389992448,389996799,US
 389996800,389996800,SG
 389996801,390026751,US
 390026752,390029311,NL
@@ -4581,20 +4637,26 @@
 392662144,392662207,IN
 392662208,392662399,US
 392662400,392662463,KR
-392662464,392663039,US
+392662464,392662495,US
+392662496,392662511,HK
+392662512,392663039,US
 392663040,392663071,FI
 392663072,392663103,US
 392663104,392663135,IE
 392663136,392663167,US
 392663168,392663199,NL
-392663200,392663359,US
+392663200,392663295,US
+392663296,392663327,IE
+392663328,392663359,US
 392663360,392663391,IE
 392663392,392663487,US
 392663488,392663519,IE
 392663520,392664383,US
 392664384,392664415,IE
 392664416,392664431,NL
-392664432,392665855,US
+392664432,392664479,US
+392664480,392664495,IE
+392664496,392665855,US
 392665856,392665887,HK
 392665888,392665983,US
 392665984,392666015,HK
@@ -4832,31 +4894,30 @@
 394567680,394567935,CA
 394575872,394576383,CA
 394584064,394584319,US
-394592256,394593279,US
+394592256,394592511,US
+394592512,394592767,GB
+394592768,394593279,US
 394600448,394600703,US
 394608640,394608703,CA
 394608704,394608711,US
 394608712,394608895,CA
 394616832,394617087,US
-394625024,394665983,US
+394625024,394658047,US
 394665984,394666239,CA
-394666240,394698751,US
+394674176,394690815,US
 394698752,394699007,CA
-394699008,394747903,US
+394706944,394739967,US
 394747904,394748159,CA
-394748160,394756351,US
-394764288,394764543,US
+394756096,394772479,US
 394772480,394772735,CA
 394780672,394780927,US
-394788864,394797055,US
 394797056,394797311,CA
-394797312,394813439,US
+394805248,394805503,US
 394813440,394813695,VG
-394813696,394854399,US
+394821632,394854399,US
 394854400,394854655,CA
 394862592,394862847,US
-394870784,394887423,US
-394895360,394895615,US
+394870784,394903551,US
 394903552,394903807,CA
 394911744,394911999,US
 394919936,394936319,US
@@ -4866,15 +4927,19 @@
 394960896,394961151,US
 394969088,395018239,US
 395018240,395018495,CA
-395034624,395034879,US
+395026432,395026687,US
+395034624,395051007,US
 395051008,395051263,CA
-395067392,395067647,US
-395083776,395149311,US
+395059200,395059455,US
+395067392,395084031,US
+395091968,395092223,CA
+395100160,395149311,US
 395149312,395149567,CA
-395165696,395165951,US
+395157504,395157759,US
+395165696,395182079,US
 395182080,395182335,CA
-395198464,395198719,US
-395214848,395345919,US
+395190272,395190527,US
+395198464,395345919,US
 395345920,395346175,CA
 395362304,395362559,US
 395378688,395477247,US
@@ -4903,7 +4968,6 @@
 396083200,396083711,US
 396099584,396263423,US
 396263424,396263679,CA
-396279808,396280063,US
 396296192,396427519,US
 396443648,396443903,CA
 396460032,396493055,US
@@ -4997,9 +5061,7 @@
 399020032,399028223,NL
 399028224,399032319,US
 399032320,399036415,NL
-399036416,399055871,US
-399055872,399056639,NL
-399056640,399076095,US
+399036416,399076095,US
 399076096,399076863,NL
 399076864,399087615,US
 399087616,399088639,NL
@@ -5173,8 +5235,8 @@
 400805888,400809983,CA
 400809984,400883711,US
 400883712,400883759,CA
-400883760,400883767,US
-400883768,400883799,CA
+400883760,400883775,US
+400883776,400883799,CA
 400883800,400883807,US
 400883808,400883823,CA
 400883824,400883831,US
@@ -5184,18 +5246,13 @@
 400883888,400883895,BG
 400883896,400883919,CA
 400883920,400883927,GB
-400883928,400884231,CA
-400884232,400884239,US
-400884240,400884255,CA
+400883928,400884255,CA
 400884256,400884287,US
-400884288,400884319,CA
-400884320,400884359,US
-400884360,400884415,CA
-400884416,400884431,US
-400884432,400884455,CA
+400884288,400884335,CA
+400884336,400884351,US
+400884352,400884455,CA
 400884456,400884463,US
-400884464,400884471,CA
-400884472,400884479,US
+400884464,400884479,CA
 400884480,400884735,TR
 400884736,400884991,GB
 400884992,400885007,US
@@ -5203,313 +5260,193 @@
 400885096,400885103,US
 400885104,400885111,CA
 400885112,400885119,US
-400885120,400885223,CA
-400885224,400885227,US
-400885228,400885279,CA
+400885120,400885239,CA
+400885240,400885247,US
+400885248,400885279,CA
 400885280,400885311,US
 400885312,400885407,CA
 400885408,400885439,US
-400885440,400885783,CA
-400885784,400885791,US
-400885792,400885887,CA
-400885888,400885919,US
-400885920,400885999,CA
-400886000,400886015,US
-400886016,400886031,CA
+400885440,400886031,CA
 400886032,400886047,US
-400886048,400886095,CA
-400886096,400886111,US
-400886112,400886119,CA
-400886120,400886135,US
-400886136,400886151,CA
-400886152,400886159,US
-400886160,400886175,CA
-400886176,400886183,US
-400886184,400886191,CA
-400886192,400886199,US
-400886200,400886303,CA
-400886304,400886335,US
-400886336,400886351,CA
-400886352,400886399,US
-400886400,400886407,CA
+400886048,400886351,CA
+400886352,400886383,US
+400886384,400886407,CA
 400886408,400886415,US
-400886416,400886455,CA
-400886456,400886463,SE
-400886464,400886527,US
-400886528,400886583,CA
-400886584,400886591,US
-400886592,400886623,CA
-400886624,400886639,US
-400886640,400886695,CA
-400886696,400886703,FI
-400886704,400886719,CA
+400886416,400886495,CA
+400886496,400886527,US
+400886528,400886719,CA
 400886720,400886767,US
 400886768,400887039,CA
 400887040,400887135,US
 400887136,400887151,CA
-400887152,400887175,US
-400887176,400887231,CA
+400887152,400887167,US
+400887168,400887231,CA
 400887232,400887263,US
-400887264,400887311,CA
-400887312,400887327,US
-400887328,400887335,CA
-400887336,400887343,US
+400887264,400887343,CA
 400887344,400887351,SE
 400887352,400887503,CA
-400887504,400887543,US
-400887544,400887551,CA
+400887504,400887535,US
+400887536,400887551,CA
 400887552,400887807,GB
-400887808,400887831,CA
-400887832,400887839,US
-400887840,400887895,CA
-400887896,400887911,US
-400887912,400887935,CA
-400887936,400887959,US
-400887960,400887975,CA
-400887976,400887983,US
-400887984,400888031,CA
+400887808,400887871,CA
+400887872,400887879,US
+400887880,400888031,CA
 400888032,400888039,US
 400888040,400888063,CA
 400888064,400888319,US
 400888320,400888575,CA
 400888576,400888831,GB
-400888832,400889343,CA
-400889344,400889367,US
-400889368,400889407,CA
-400889408,400889503,US
-400889504,400889511,CA
-400889512,400889599,US
-400889600,400889647,CA
-400889648,400889679,US
-400889680,400889711,CA
-400889712,400889743,US
-400889744,400889775,CA
-400889776,400889807,US
-400889808,400889855,CA
+400888832,400889439,CA
+400889440,400889503,US
+400889504,400889519,CA
+400889520,400889567,US
+400889568,400889647,CA
+400889648,400889663,US
+400889664,400889855,CA
 400889856,400890111,US
-400890112,400890143,CA
-400890144,400890151,US
-400890152,400890159,CA
-400890160,400890223,US
-400890224,400890263,CA
+400890112,400890159,CA
+400890160,400890167,US
+400890168,400890175,CA
+400890176,400890207,US
+400890208,400890263,CA
 400890264,400890271,US
 400890272,400890335,CA
 400890336,400890367,US
-400890368,400890383,CA
-400890384,400890391,US
-400890392,400890399,CA
-400890400,400890407,US
-400890408,400890447,CA
-400890448,400890495,US
-400890496,400890527,CA
+400890368,400890527,CA
 400890528,400890543,US
-400890544,400890559,CA
-400890560,400890623,US
-400890624,400890639,CA
-400890640,400890655,US
-400890656,400890783,CA
-400890784,400890831,US
-400890832,400890847,CA
-400890848,400890863,US
-400890864,400891263,CA
+400890544,400890591,CA
+400890592,400890623,US
+400890624,400890815,CA
+400890816,400890831,US
+400890832,400891263,CA
 400891264,400891343,US
-400891344,400891359,CA
-400891360,400891375,US
-400891376,400891383,CA
-400891384,400891407,US
-400891408,400891415,CA
-400891416,400891487,US
+400891344,400891391,CA
+400891392,400891407,US
+400891408,400891423,CA
+400891424,400891455,US
+400891456,400891471,CA
+400891472,400891487,US
 400891488,400891535,CA
-400891536,400891647,US
-400891648,400891695,CA
-400891696,400891703,US
-400891704,400891775,CA
-400891776,400891807,US
-400891808,400891887,CA
-400891888,400892159,US
-400892160,400892479,CA
+400891536,400891551,US
+400891552,400891615,CA
+400891616,400891631,US
+400891632,400891791,CA
+400891792,400891807,US
+400891808,400891903,CA
+400891904,400892159,US
+400892160,400892215,CA
+400892216,400892223,US
+400892224,400892479,CA
 400892480,400892543,US
-400892544,400892567,CA
-400892568,400892575,US
-400892576,400892591,CA
+400892544,400892591,CA
 400892592,400892607,US
-400892608,400892639,CA
-400892640,400892655,US
-400892656,400892671,CA
-400892672,400892783,US
-400892784,400892863,CA
-400892864,400892927,US
-400892928,400893055,CA
+400892608,400892671,CA
+400892672,400892767,US
+400892768,400893055,CA
 400893056,400893087,US
-400893088,400893095,CA
-400893096,400893311,US
+400893088,400893103,CA
+400893104,400893151,US
+400893152,400893183,CA
+400893184,400893311,US
 400893312,400893695,CA
 400893696,400893983,US
-400893984,400893991,CA
-400893992,400894047,US
+400893984,400893999,CA
+400894000,400894047,US
 400894048,400894079,CA
 400894080,400894335,US
 400894336,400894463,CA
-400894464,400894767,US
-400894768,400894783,CA
-400894784,400894815,US
-400894816,400894847,CA
-400894848,400894879,US
-400894880,400894903,CA
-400894904,400894911,US
-400894912,400894975,CA
-400894976,400895295,US
+400894464,400894719,US
+400894720,400895231,CA
+400895232,400895295,US
 400895296,400895359,CA
 400895360,400895407,US
-400895408,400895455,CA
-400895456,400895567,US
-400895568,400895663,CA
+400895408,400895487,CA
+400895488,400895551,US
+400895552,400895663,CA
 400895664,400895679,US
-400895680,400895711,CA
-400895712,400896511,US
-400896512,400896591,CA
-400896592,400896599,US
-400896600,400896767,CA
-400896768,400896775,US
-400896776,400896823,CA
-400896824,400896831,US
-400896832,400896911,CA
-400896912,400896919,US
-400896920,400896927,CA
-400896928,400896935,US
-400896936,400896951,CA
-400896952,400896959,US
-400896960,400897023,CA
+400895680,400895743,CA
+400895744,400896511,US
+400896512,400897023,CA
 400897024,400897279,US
-400897280,400897311,CA
-400897312,400897327,US
-400897328,400897423,CA
+400897280,400897423,CA
 400897424,400897439,US
-400897440,400897471,CA
-400897472,400897519,US
+400897440,400897503,CA
+400897504,400897519,US
 400897520,400897535,CA
 400897536,400897791,US
-400897792,400897847,CA
-400897848,400897855,US
-400897856,400897887,CA
+400897792,400897887,CA
 400897888,400897903,US
-400897904,400897919,CA
-400897920,400897967,US
+400897904,400897935,CA
+400897936,400897967,US
 400897968,400897983,CA
-400897984,400898047,US
-400898048,400898063,CA
+400897984,400898015,US
+400898016,400898063,CA
 400898064,400898079,US
-400898080,400898159,CA
-400898160,400898303,US
-400898304,400898311,CA
-400898312,400898319,US
-400898320,400898447,CA
-400898448,400898495,US
-400898496,400898527,CA
-400898528,400898559,US
-400898560,400898575,CA
-400898576,400898591,US
-400898592,400898687,CA
-400898688,400898735,US
-400898736,400898751,CA
-400898752,400898799,US
-400898800,400898807,CA
-400898808,400898815,US
-400898816,400898879,CA
-400898880,400898887,SE
-400898888,400898911,CA
-400898912,400899039,US
-400899040,400899047,CA
-400899048,400899327,US
-400899328,400899591,CA
-400899592,400899599,US
-400899600,400899623,CA
-400899624,400899631,US
-400899632,400899711,CA
+400898080,400898175,CA
+400898176,400898303,US
+400898304,400898703,CA
+400898704,400898735,US
+400898736,400898943,CA
+400898944,400899039,US
+400899040,400899071,CA
+400899072,400899327,US
+400899328,400899711,CA
 400899712,400899743,US
 400899744,400899759,CA
 400899760,400899807,US
 400899808,400899815,CA
-400899816,400899839,US
-400899840,400899847,CA
+400899816,400899823,US
+400899824,400899847,CA
 400899848,400899855,US
 400899856,400899967,CA
 400899968,400899999,US
 400900000,400900031,CA
 400900032,400900255,US
-400900256,400900263,CA
-400900264,400900351,US
-400900352,400900391,CA
-400900392,400900399,US
-400900400,400900415,CA
-400900416,400900479,US
-400900480,400900487,CA
-400900488,400900495,US
-400900496,400900527,CA
-400900528,400901119,US
-400901120,400901487,CA
-400901488,400901495,US
-400901496,400901567,CA
-400901568,400901631,US
+400900256,400900287,CA
+400900288,400900319,US
+400900320,400900559,CA
+400900560,400900575,US
+400900576,400900607,CA
+400900608,400901119,US
+400901120,400901567,CA
+400901568,400901583,US
+400901584,400901615,CA
+400901616,400901631,US
 400901632,400901759,CA
-400901760,400901887,US
+400901760,400901807,US
+400901808,400901823,CA
+400901824,400901887,US
 400901888,400902143,CA
 400902144,400902399,US
 400902400,400902431,CA
-400902432,400902495,US
-400902496,400902527,CA
+400902432,400902479,US
+400902480,400902527,CA
 400902528,400902623,US
 400902624,400902639,CA
 400902640,400902655,US
-400902656,400902663,CA
-400902664,400902671,US
-400902672,400902719,CA
+400902656,400902719,CA
 400902720,400902783,US
 400902784,400902911,CA
-400902912,400902975,US
-400902976,400903183,CA
-400903184,400903199,US
-400903200,400903231,CA
-400903232,400903247,US
-400903248,400903271,CA
-400903272,400903279,US
-400903280,400903935,CA
+400902912,400902943,US
+400902944,400903935,CA
 400903936,400904479,US
 400904480,400904487,CA
-400904488,400904591,US
-400904592,400904599,CA
-400904600,400904687,US
-400904688,400905271,CA
+400904488,400904575,US
+400904576,400905271,CA
 400905272,400905279,US
-400905280,400905335,CA
-400905336,400905343,US
-400905344,400905359,CA
-400905360,400905367,US
-400905368,400905399,CA
-400905400,400905407,US
-400905408,400905455,CA
-400905456,400905463,FI
-400905464,400906111,CA
-400906112,400906143,US
-400906144,400906175,CA
+400905280,400905439,CA
+400905440,400905447,US
+400905448,400906175,CA
 400906176,400906207,US
-400906208,400906215,CA
-400906216,400906223,US
-400906224,400906231,CA
-400906232,400906239,US
-400906240,400906255,CA
+400906208,400906255,CA
 400906256,400906263,US
-400906264,400906367,CA
-400906368,400906383,US
-400906384,400906399,CA
+400906264,400906399,CA
 400906400,400906463,US
-400906464,400906471,CA
-400906472,400906815,US
+400906464,400906479,CA
+400906480,400906815,US
 400906816,400906831,CA
 400906832,400906879,US
-400906880,400906959,CA
-400906960,400907007,US
-400907008,400907263,CA
+400906880,400907263,CA
 400907264,400907519,US
 400907520,400907775,CA
 400907776,400908031,US
@@ -5610,17 +5547,12 @@
 401375536,401375543,US
 401375544,401375743,CA
 401375744,401376095,US
-401376096,401376103,SE
-401376104,401376111,CA
-401376112,401376191,US
-401376192,401376223,CA
-401376224,401376255,US
-401376256,401376327,CA
-401376328,401376335,US
-401376336,401376351,CA
-401376352,401376415,US
-401376416,401376447,CA
-401376448,401376511,US
+401376096,401376111,CA
+401376112,401376143,US
+401376144,401376447,CA
+401376448,401376479,US
+401376480,401376495,CA
+401376496,401376511,US
 401376512,401377791,CA
 401377792,401378303,US
 401378304,401378559,EG
@@ -5628,47 +5560,45 @@
 401378688,401378815,CA
 401378816,401379071,US
 401379072,401380351,CA
-401380352,401380447,US
+401380352,401380367,US
+401380368,401380431,CA
+401380432,401380447,US
 401380448,401380479,CA
-401380480,401380503,US
-401380504,401380527,CA
+401380480,401380495,US
+401380496,401380527,CA
 401380528,401380543,US
 401380544,401380607,CA
 401380608,401380863,US
 401380864,401381119,CA
 401381120,401381247,US
 401381248,401381375,CA
-401381376,401381887,US
-401381888,401381951,CA
-401381952,401381959,US
-401381960,401382015,CA
-401382016,401382023,US
-401382024,401382063,CA
-401382064,401382087,US
-401382088,401382463,CA
+401381376,401381407,US
+401381408,401381423,CA
+401381424,401381887,US
+401381888,401382463,CA
 401382464,401382471,US
 401382472,401382479,CA
 401382480,401382527,US
-401382528,401382543,CA
-401382544,401382575,US
-401382576,401382591,CA
-401382592,401382655,US
-401382656,401384423,CA
-401384424,401384431,US
-401384432,401384799,CA
+401382528,401382559,CA
+401382560,401382575,US
+401382576,401384799,CA
 401384800,401384831,US
 401384832,401384959,CA
 401384960,401385215,US
-401385216,401385295,CA
-401385296,401385375,US
+401385216,401385343,CA
+401385344,401385375,US
 401385376,401385391,CA
-401385392,401385983,US
+401385392,401385407,US
+401385408,401385423,CA
+401385424,401385439,US
+401385440,401385471,CA
+401385472,401385983,US
 401385984,401386303,CA
 401386304,401386399,US
 401386400,401386415,CA
 401386416,401386463,US
-401386464,401386471,CA
-401386472,401386495,US
+401386464,401386479,CA
+401386480,401386495,US
 401386496,401387007,SE
 401387008,401387263,US
 401387264,401387519,CA
@@ -5683,123 +5613,89 @@
 401388672,401388687,US
 401388688,401389567,CA
 401389568,401390079,US
-401390080,401390335,CA
-401390336,401390847,US
+401390080,401390591,CA
+401390592,401390847,US
 401390848,401393151,CA
 401393152,401393407,US
-401393408,401393663,CA
-401393664,401393919,US
-401393920,401394527,CA
-401394528,401394559,US
-401394560,401395455,CA
+401393408,401395455,CA
 401395456,401395711,US
-401395712,401395727,CA
-401395728,401395743,US
-401395744,401395807,CA
-401395808,401395839,US
-401395840,401396239,CA
-401396240,401396255,US
-401396256,401396287,CA
-401396288,401396319,CN
-401396320,401396383,US
-401396384,401396391,CA
-401396392,401396447,US
-401396448,401396463,CA
-401396464,401396479,US
-401396480,401397247,CA
+401395712,401396287,CA
+401396288,401396351,CN
+401396352,401396383,US
+401396384,401396415,CA
+401396416,401396447,US
+401396448,401397247,CA
 401397248,401397311,US
 401397312,401397327,CA
 401397328,401397359,US
-401397360,401397407,CA
-401397408,401397439,US
-401397440,401397487,CA
-401397488,401397503,US
-401397504,401399063,CA
-401399064,401399135,US
+401397360,401399103,CA
+401399104,401399135,US
 401399136,401399167,CA
 401399168,401399199,US
 401399200,401399215,CA
 401399216,401399263,US
 401399264,401399279,CA
 401399280,401399295,US
-401399296,401399551,CA
-401399552,401399599,US
-401399600,401399607,CA
-401399608,401399647,US
+401399296,401399583,CA
+401399584,401399599,US
+401399600,401399615,CA
+401399616,401399647,US
 401399648,401399663,CA
 401399664,401399679,US
 401399680,401399711,CA
-401399712,401399775,US
-401399776,401400063,CA
+401399712,401399743,US
+401399744,401400063,CA
 401400064,401400319,US
-401400320,401400623,CA
-401400624,401400671,US
+401400320,401400655,CA
+401400656,401400671,US
 401400672,401400703,CA
 401400704,401400735,US
 401400736,401400751,CA
-401400752,401400799,US
-401400800,401400815,CA
+401400752,401400783,US
+401400784,401400815,CA
 401400816,401400863,US
 401400864,401400871,CA
 401400872,401400879,NO
-401400880,401400927,US
-401400928,401400959,CA
-401400960,401400991,US
-401400992,401401023,CA
-401401024,401401055,US
-401401056,401401071,CA
-401401072,401401103,US
-401401104,401401111,CA
-401401112,401401215,US
+401400880,401400895,US
+401400896,401401039,CA
+401401040,401401055,US
+401401056,401401119,CA
+401401120,401401135,US
+401401136,401401151,CA
+401401152,401401215,US
 401401216,401401247,CA
 401401248,401401279,US
-401401280,401401295,CA
-401401296,401401343,US
-401401344,401401359,CA
-401401360,401401439,US
-401401440,401401455,CA
-401401456,401401463,US
-401401464,401401471,CA
+401401280,401401359,CA
+401401360,401401375,US
+401401376,401401471,CA
 401401472,401401503,US
-401401504,401401511,CA
-401401512,401401567,US
-401401568,401401583,CA
-401401584,401401599,US
-401401600,401401615,CA
-401401616,401401623,US
-401401624,401401647,CA
-401401648,401401679,US
-401401680,401401687,CA
-401401688,401401695,US
-401401696,401401727,CA
+401401504,401401535,CA
+401401536,401401567,US
+401401568,401401663,CA
+401401664,401401679,US
+401401680,401401727,CA
 401401728,401401855,US
-401401856,401401903,CA
-401401904,401401919,US
-401401920,401401935,CA
+401401856,401401935,CA
 401401936,401401983,US
-401401984,401401999,CA
-401402000,401402095,US
+401401984,401402079,CA
+401402080,401402095,US
 401402096,401402111,CA
 401402112,401402207,US
 401402208,401402223,CA
 401402224,401402239,US
 401402240,401402287,CA
 401402288,401402303,US
-401402304,401402335,CA
-401402336,401402343,US
-401402344,401402623,CA
+401402304,401402623,CA
 401402624,401402879,US
-401402880,401403391,CA
-401403392,401403423,US
-401403424,401403455,CA
-401403456,401403503,US
+401402880,401403407,CA
+401403408,401403423,US
+401403424,401403487,CA
+401403488,401403503,US
 401403504,401403583,CA
 401403584,401403615,US
-401403616,401403647,CA
-401403648,401403679,US
-401403680,401403695,CA
-401403696,401403775,US
-401403776,401403807,CA
+401403616,401403695,CA
+401403696,401403743,US
+401403744,401403807,CA
 401403808,401403839,US
 401403840,401403903,CA
 401403904,401413887,US
@@ -5887,7 +5783,11 @@
 402177536,402178047,JP
 402178048,402223103,US
 402223104,402227199,CA
-402227200,402231295,PR
+402227200,402227711,US
+402227712,402229247,PR
+402229248,402229503,US
+402229504,402230271,PR
+402230272,402231295,US
 402235392,402239301,US
 402239302,402239302,CA
 402239303,402239473,US
@@ -5901,315 +5801,241 @@
 402255872,402259967,US
 402259968,402260031,CA
 402260032,402260039,FI
-402260040,402260127,CA
-402260128,402260143,US
-402260144,402260159,CA
-402260160,402260167,US
-402260168,402260199,CA
-402260200,402260231,US
-402260232,402260271,CA
+402260040,402260055,CA
+402260056,402260063,US
+402260064,402260271,CA
 402260272,402260279,GB
-402260280,402260295,CA
-402260296,402260303,US
-402260304,402260367,CA
-402260368,402260383,US
-402260384,402260431,CA
-402260432,402260439,US
-402260440,402260479,CA
+402260280,402260479,CA
 402260480,402260511,US
-402260512,402260527,CA
-402260528,402260543,US
-402260544,402260575,CA
-402260576,402260655,US
-402260656,402260751,CA
-402260752,402260831,US
-402260832,402260863,CA
+402260512,402260575,CA
+402260576,402260607,US
+402260608,402260639,CA
+402260640,402260655,US
+402260656,402260767,CA
+402260768,402260783,US
+402260784,402260799,CA
+402260800,402260815,US
+402260816,402260863,CA
 402260864,402260895,US
 402260896,402260911,CA
 402260912,402260959,US
-402260960,402260967,CA
-402260968,402260991,US
-402260992,402260999,CA
-402261000,402261087,US
+402260960,402260975,CA
+402260976,402260991,US
+402260992,402261007,CA
+402261008,402261087,US
 402261088,402261119,CA
-402261120,402261247,US
-402261248,402262015,CA
+402261120,402261151,US
+402261152,402261183,CA
+402261184,402261215,US
+402261216,402262015,CA
 402262016,402262271,US
-402262272,402262351,CA
-402262352,402262359,US
-402262360,402262431,CA
-402262432,402262439,SE
-402262440,402262447,CA
+402262272,402262447,CA
 402262448,402262455,US
 402262456,402262463,FI
 402262464,402262479,US
-402262480,402262519,CA
-402262520,402262527,US
-402262528,402262575,CA
-402262576,402262599,US
-402262600,402262663,CA
-402262664,402262671,US
-402262672,402262695,CA
-402262696,402262703,US
-402262704,402262751,CA
-402262752,402262759,US
-402262760,402262847,CA
-402262848,402262855,US
-402262856,402262871,CA
+402262480,402262871,CA
 402262872,402262879,US
-402262880,402262927,CA
-402262928,402262935,US
-402262936,402262943,CA
-402262944,402262951,US
-402262952,402262975,CA
-402262976,402262983,US
-402262984,402263023,CA
-402263024,402263039,US
-402263040,402263295,CA
-402263296,402263311,US
-402263312,402263335,CA
+402262880,402263335,CA
 402263336,402263343,US
-402263344,402263359,CA
-402263360,402263391,US
-402263392,402263423,CA
-402263424,402263487,US
+402263344,402263423,CA
+402263424,402263455,US
+402263456,402263471,CA
+402263472,402263487,US
 402263488,402263807,CA
 402263808,402264063,US
 402264064,402264079,CA
 402264080,402264095,US
 402264096,402264111,CA
-402264112,402264319,US
-402264320,402264367,CA
-402264368,402264383,US
-402264384,402264447,CA
-402264448,402264575,US
-402264576,402265415,CA
-402265416,402265423,SE
-402265424,402265471,CA
-402265472,402265583,US
-402265584,402265599,CA
-402265600,402265631,US
-402265632,402265663,CA
+402264112,402264127,US
+402264128,402264191,CA
+402264192,402264319,US
+402264320,402264447,CA
+402264448,402264559,US
+402264560,402265471,CA
+402265472,402265535,US
+402265536,402265551,CA
+402265552,402265583,US
+402265584,402265663,CA
 402265664,402265690,US
 402265691,402265691,BD
-402265692,402265791,US
-402265792,402265879,CA
+402265692,402265759,US
+402265760,402265879,CA
 402265880,402265887,US
 402265888,402265919,CA
-402265920,402266143,US
-402266144,402266159,CA
-402266160,402266215,US
-402266216,402266287,CA
+402265920,402265951,US
+402265952,402265967,CA
+402265968,402266143,US
+402266144,402266175,CA
+402266176,402266191,US
+402266192,402266287,CA
 402266288,402266303,US
-402266304,402266311,CA
-402266312,402266319,US
-402266320,402266335,CA
-402266336,402266343,US
-402266344,402266351,CA
-402266352,402266359,US
-402266360,402266367,CA
-402266368,402266703,US
+402266304,402266367,CA
+402266368,402266655,US
+402266656,402266671,CA
+402266672,402266703,US
 402266704,402266727,CA
 402266728,402266735,NO
 402266736,402266751,US
-402266752,402266815,CA
-402266816,402266847,US
-402266848,402267391,CA
+402266752,402267391,CA
 402267392,402267423,US
 402267424,402267439,CA
-402267440,402267487,US
+402267440,402267455,US
+402267456,402267471,CA
+402267472,402267487,US
 402267488,402267519,CA
 402267520,402267647,US
-402267648,402267903,CA
-402267904,402268159,US
-402268160,402269199,CA
+402267648,402269199,CA
 402269200,402269207,US
-402269208,402269215,CA
-402269216,402269223,US
-402269224,402269231,CA
-402269232,402269247,US
-402269248,402269263,CA
-402269264,402269455,US
-402269456,402269471,CA
-402269472,402269503,US
-402269504,402269519,CA
-402269520,402269535,US
-402269536,402269551,CA
-402269552,402269567,US
-402269568,402269583,CA
-402269584,402269591,US
-402269592,402269599,CA
-402269600,402269647,US
-402269648,402269663,CA
-402269664,402269679,US
-402269680,402269983,CA
+402269208,402269263,CA
+402269264,402269279,US
+402269280,402269311,CA
+402269312,402269343,US
+402269344,402269375,CA
+402269376,402269455,US
+402269456,402269631,CA
+402269632,402269647,US
+402269648,402269983,CA
 402269984,402270031,US
-402270032,402270047,CA
-402270048,402270207,US
-402270208,402270223,CA
-402270224,402270239,US
-402270240,402270255,CA
-402270256,402270303,US
-402270304,402270335,CA
+402270032,402270079,CA
+402270080,402270207,US
+402270208,402270335,CA
 402270336,402270463,US
 402270464,402270719,CA
-402270720,402270783,US
-402270784,402270879,CA
-402270880,402270943,US
-402270944,402270975,CA
+402270720,402270751,US
+402270752,402270879,CA
+402270880,402270895,US
+402270896,402270911,CA
+402270912,402270927,US
+402270928,402270975,CA
 402270976,402271103,US
 402271104,402271119,CA
 402271120,402271135,US
 402271136,402271167,CA
 402271168,402271199,US
 402271200,402271231,CA
-402271232,402271423,US
-402271424,402271439,CA
+402271232,402271391,US
+402271392,402271439,CA
 402271440,402271455,US
 402271456,402271487,CA
-402271488,402271615,US
+402271488,402271519,US
+402271520,402271551,CA
+402271552,402271615,US
 402271616,402271631,CA
-402271632,402271735,US
-402271736,402271999,CA
+402271632,402271647,US
+402271648,402271679,CA
+402271680,402271727,US
+402271728,402271999,CA
 402272000,402272127,US
 402272128,402272255,CA
 402272256,402272639,US
-402272640,402272663,CA
-402272664,402272671,US
-402272672,402272703,CA
+402272640,402272703,CA
 402272704,402272895,US
 402272896,402273279,CA
-402273280,402273407,US
-402273408,402273423,CA
-402273424,402273439,US
-402273440,402273471,CA
+402273280,402273311,US
+402273312,402273375,CA
+402273376,402273391,US
+402273392,402273471,CA
 402273472,402273503,US
 402273504,402273519,CA
 402273520,402273535,US
-402273536,402273543,CA
-402273544,402273551,FI
-402273552,402273599,CA
-402273600,402273791,US
-402273792,402273927,CA
-402273928,402273951,US
+402273536,402273599,CA
+402273600,402273631,US
+402273632,402273663,CA
+402273664,402273791,US
+402273792,402273935,CA
+402273936,402273951,US
 402273952,402273983,CA
 402273984,402273999,US
 402274000,402274015,CA
 402274016,402274047,US
-402274048,402274239,CA
-402274240,402274287,US
-402274288,402274295,CA
-402274296,402274463,US
+402274048,402274271,CA
+402274272,402274287,US
+402274288,402274303,CA
+402274304,402274463,US
 402274464,402274479,CA
-402274480,402274559,US
-402274560,402275351,CA
-402275352,402275359,US
-402275360,402275391,CA
-402275392,402275839,US
+402274480,402274543,US
+402274544,402275423,CA
+402275424,402275839,US
 402275840,402276095,CA
 402276096,402276223,US
 402276224,402277375,CA
 402277376,402277631,US
 402277632,402278015,CA
-402278016,402278127,US
+402278016,402278047,US
+402278048,402278079,CA
+402278080,402278127,US
 402278128,402278399,CA
 402278400,402278655,US
-402278656,402279959,CA
-402279960,402279967,US
-402279968,402280063,CA
+402278656,402280063,CA
 402280064,402280191,US
 402280192,402280207,CA
 402280208,402280223,US
 402280224,402280319,CA
-402280320,402280415,US
-402280416,402280959,CA
+402280320,402280383,US
+402280384,402280959,CA
 402280960,402281087,US
 402281088,402281199,CA
 402281200,402281471,US
-402281472,402281603,CA
-402281604,402281607,US
-402281608,402281687,CA
-402281688,402281691,US
-402281692,402281727,CA
+402281472,402281727,CA
 402281728,402281823,US
-402281824,402281991,CA
-402281992,402281999,US
-402282000,402282111,CA
+402281824,402282111,CA
 402282112,402282239,US
-402282240,402282815,CA
-402282816,402282847,US
-402282848,402282879,CA
+402282240,402282879,CA
 402282880,402282911,US
 402282912,402282927,CA
-402282928,402282975,US
+402282928,402282943,US
+402282944,402282959,CA
+402282960,402282975,US
 402282976,402283263,CA
 402283264,402283519,US
-402283520,402284039,CA
-402284040,402284047,US
-402284048,402284159,CA
+402283520,402284159,CA
 402284160,402284287,US
-402284288,402284799,CA
+402284288,402284351,CA
+402284352,402284415,CN
+402284416,402284799,CA
 402284800,402285055,US
-402285056,402285311,CA
-402285312,402285343,US
-402285344,402285375,CA
-402285376,402285391,US
-402285392,402285407,CA
+402285056,402285407,CA
 402285408,402285439,US
 402285440,402285567,CA
 402285568,402285823,US
-402285824,402286095,CA
-402286096,402286143,US
-402286144,402286319,CA
-402286320,402286895,US
+402285824,402286335,CA
+402286336,402286847,US
+402286848,402286863,CA
+402286864,402286895,US
 402286896,402286911,CA
 402286912,402286927,US
 402286928,402286935,CA
 402286936,402286975,US
-402286976,402286983,CA
-402286984,402286991,US
-402286992,402287207,CA
-402287208,402287215,US
-402287216,402287263,CA
+402286976,402287263,CA
 402287264,402287279,US
-402287280,402287295,CA
-402287296,402287391,US
-402287392,402287423,CA
+402287280,402287423,CA
 402287424,402287487,US
 402287488,402287551,CA
 402287552,402287583,US
 402287584,402287743,CA
-402287744,402287799,US
-402287800,402287807,CA
-402287808,402287839,US
-402287840,402287871,CA
-402287872,402287903,US
-402287904,402288007,CA
-402288008,402288015,US
-402288016,402288031,CA
-402288032,402288063,US
-402288064,402288135,CA
-402288136,402288143,US
-402288144,402288159,CA
-402288160,402288191,US
-402288192,402288223,CA
-402288224,402288287,US
+402287744,402287791,US
+402287792,402288031,CA
+402288032,402288047,US
+402288048,402288159,CA
+402288160,402288175,US
+402288176,402288223,CA
+402288224,402288255,US
+402288256,402288271,CA
+402288272,402288287,US
 402288288,402288319,CA
 402288320,402288383,US
-402288384,402288391,CA
-402288392,402288399,US
-402288400,402288431,CA
+402288384,402288431,CA
 402288432,402288447,US
-402288448,402288511,CA
-402288512,402288591,US
+402288448,402288543,CA
+402288544,402288591,US
 402288592,402288607,CA
 402288608,402288623,US
-402288624,402288631,CA
-402288632,402288895,US
+402288624,402288639,CA
+402288640,402288895,US
 402288896,402288927,CA
 402288928,402288935,US
 402288936,402289063,CA
-402289064,402289071,CN
+402289064,402289071,US
 402289072,402289119,CA
 402289120,402289151,US
 402289152,402289407,CA
@@ -6224,13 +6050,15 @@
 402289744,402289759,US
 402289760,402289775,CA
 402289776,402289791,US
-402289792,402289919,CA
-402289920,402290047,US
-402290048,402290175,CA
-402290176,402290255,US
+402289792,402289983,CA
+402289984,402290047,US
+402290048,402290239,CA
+402290240,402290255,US
 402290256,402290271,CA
 402290272,402290287,US
-402290288,402290399,CA
+402290288,402290295,CA
+402290296,402290303,US
+402290304,402290399,CA
 402290400,402290407,US
 402290408,402290479,CA
 402290480,402290511,US
@@ -6252,7 +6080,9 @@
 402291136,402291199,US
 402291200,402291231,CA
 402291232,402291263,US
-402291264,402291327,CA
+402291264,402291279,CA
+402291280,402291287,US
+402291288,402291327,CA
 402291328,402291359,US
 402291360,402291391,CA
 402291392,402291423,US
@@ -6261,8 +6091,8 @@
 402292000,402292095,CA
 402292096,402292103,US
 402292104,402292143,CA
-402292144,402292151,US
-402292152,402292351,CA
+402292144,402292159,US
+402292160,402292351,CA
 402292352,402353663,US
 402353664,402353919,JP
 402353920,402354175,ID
@@ -6291,33 +6121,35 @@
 402409472,402410495,US
 402410496,402410751,TR
 402410752,402522111,US
-402522112,402522175,CA
-402522176,402522183,US
-402522184,402522223,CA
+402522112,402522223,CA
 402522224,402522231,US
 402522232,402522271,CA
-402522272,402522287,US
-402522288,402522327,CA
-402522328,402522335,US
-402522336,402522399,CA
+402522272,402522279,US
+402522280,402522399,CA
 402522400,402522407,US
 402522408,402522479,CA
-402522480,402522575,US
-402522576,402522591,CA
-402522592,402522655,US
-402522656,402522679,CA
-402522680,402522911,US
-402522912,402522943,CA
-402522944,402522975,US
-402522976,402522991,CA
-402522992,402523103,US
-402523104,402523111,CA
-402523112,402523135,US
+402522480,402522559,US
+402522560,402522591,CA
+402522592,402522607,US
+402522608,402522623,CA
+402522624,402522655,US
+402522656,402522719,CA
+402522720,402522895,US
+402522896,402522991,CA
+402522992,402523007,US
+402523008,402523023,CA
+402523024,402523039,US
+402523040,402523071,CA
+402523072,402523103,US
+402523104,402523119,CA
+402523120,402523135,US
 402523136,402523167,CA
-402523168,402523391,US
+402523168,402523199,US
+402523200,402523231,CA
+402523232,402523391,US
 402523392,402523423,CA
-402523424,402523447,US
-402523448,402523455,CA
+402523424,402523439,US
+402523440,402523455,CA
 402523456,402523487,US
 402523488,402523503,CA
 402523504,402523647,US
@@ -6329,17 +6161,17 @@
 402524192,402524255,US
 402524256,402524263,CA
 402524264,402524271,FI
-402524272,402524279,CA
-402524280,402524367,US
-402524368,402524383,CA
-402524384,402524447,US
-402524448,402524479,CA
+402524272,402524287,CA
+402524288,402524319,US
+402524320,402524383,CA
+402524384,402524415,US
+402524416,402524479,CA
 402524480,402524575,US
 402524576,402524591,CA
 402524592,402524607,US
 402524608,402524639,CA
-402524640,402524663,US
-402524664,402524671,CA
+402524640,402524655,US
+402524656,402524671,CA
 402524672,402524799,US
 402524800,402524831,CA
 402524832,402524895,US
@@ -6348,158 +6180,139 @@
 402524960,402524991,CA
 402524992,402525007,US
 402525008,402525023,CA
-402525024,402525103,US
+402525024,402525055,US
+402525056,402525087,CA
+402525088,402525103,US
 402525104,402525119,CA
-402525120,402525375,US
-402525376,402525415,CA
-402525416,402525423,NO
-402525424,402525439,CA
+402525120,402525151,US
+402525152,402525183,CA
+402525184,402525215,US
+402525216,402525247,CA
+402525248,402525279,US
+402525280,402525295,CA
+402525296,402525327,US
+402525328,402525343,CA
+402525344,402525375,US
+402525376,402525439,CA
 402525440,402525695,US
 402525696,402525951,CA
 402525952,402526079,US
 402526080,402526207,CA
-402526208,402526559,US
-402526560,402526655,CA
+402526208,402526527,US
+402526528,402526655,CA
 402526656,402526671,US
 402526672,402526687,CA
 402526688,402526719,US
 402526720,402526975,CA
 402526976,402527359,US
 402527360,402527391,CA
-402527392,402527647,US
-402527648,402528255,CA
-402528256,402528415,US
-402528416,402528511,CA
-402528512,402529535,US
+402527392,402527615,US
+402527616,402528255,CA
+402528256,402528383,US
+402528384,402528767,CA
+402528768,402529535,US
 402529536,402529791,CA
 402529792,402530047,US
 402530048,402530303,CA
 402530304,402530559,US
 402530560,402531583,CA
 402531584,402531839,US
-402531840,402531935,CA
-402531936,402532031,US
-402532032,402532063,CA
-402532064,402532095,US
-402532096,402532159,CA
-402532160,402532231,US
-402532232,402532247,CA
+402531840,402532247,CA
 402532248,402532255,US
-402532256,402532271,CA
-402532272,402532287,US
-402532288,402532351,CA
+402532256,402532351,CA
 402532352,402532607,US
-402532608,402532887,CA
-402532888,402532895,US
-402532896,402532967,CA
-402532968,402532975,US
-402532976,402532983,CA
+402532608,402532983,CA
 402532984,402532991,US
-402532992,402533015,CA
-402533016,402533023,US
-402533024,402533031,CA
-402533032,402533039,SE
-402533040,402533055,US
-402533056,402533111,CA
+402532992,402532999,CA
+402533000,402533007,US
+402533008,402533039,CA
+402533040,402533047,US
+402533048,402533111,CA
 402533112,402533279,US
 402533280,402533295,CA
-402533296,402533343,US
-402533344,402533375,CA
-402533376,402533759,US
+402533296,402533311,US
+402533312,402533327,CA
+402533328,402533343,US
+402533344,402533631,CA
+402533632,402533759,US
 402533760,402533791,CA
 402533792,402533887,US
 402533888,402533903,CA
-402533904,402534015,US
+402533904,402533919,US
+402533920,402533935,CA
+402533936,402534015,US
 402534016,402534079,CA
 402534080,402534095,US
 402534096,402534111,CA
 402534112,402534143,US
 402534144,402534175,CA
-402534176,402534335,US
-402534336,402534399,CA
+402534176,402534255,US
+402534256,402534271,CA
+402534272,402534319,US
+402534320,402534399,CA
 402534400,402534479,US
-402534480,402534487,CA
-402534488,402534655,US
-402534656,402535167,CA
-402535168,402535423,US
-402535424,402535935,CA
+402534480,402534495,CA
+402534496,402534655,US
+402534656,402535935,CA
 402535936,402536191,US
 402536192,402536255,CA
-402536256,402536351,US
+402536256,402536287,US
+402536288,402536303,CA
+402536304,402536351,US
 402536352,402536367,CA
 402536368,402536383,US
-402536384,402536391,CA
-402536392,402536399,US
-402536400,402536431,CA
-402536432,402536447,US
-402536448,402536455,CA
-402536456,402536463,US
-402536464,402536479,CA
+402536384,402536479,CA
 402536480,402536527,US
 402536528,402536543,CA
 402536544,402536575,US
 402536576,402536639,CA
-402536640,402536703,US
-402536704,402536959,CA
+402536640,402536687,US
+402536688,402536959,CA
 402536960,402537215,US
-402537216,402537279,CA
-402537280,402537367,US
-402537368,402537375,CA
-402537376,402537391,US
-402537392,402538495,CA
-402538496,402538687,US
-402538688,402538727,CA
-402538728,402538751,US
-402538752,402538759,CA
-402538760,402538767,US
-402538768,402538815,CA
-402538816,402538895,US
+402537216,402537359,CA
+402537360,402537367,US
+402537368,402538495,CA
+402538496,402538511,US
+402538512,402538591,CA
+402538592,402538687,US
+402538688,402538735,CA
+402538736,402538751,US
+402538752,402538815,CA
+402538816,402538863,US
+402538864,402538879,CA
+402538880,402538895,US
 402538896,402538911,CA
 402538912,402538927,US
-402538928,402538943,CA
-402538944,402538975,US
-402538976,402539071,CA
-402539072,402539087,US
-402539088,402539095,SE
-402539096,402539135,CA
-402539136,402539199,US
-402539200,402539327,CA
-402539328,402539455,US
-402539456,402539535,CA
-402539536,402539551,US
-402539552,402539567,CA
-402539568,402539583,US
+402538928,402538959,CA
+402538960,402538975,US
+402538976,402539079,CA
+402539080,402539087,US
+402539088,402539583,CA
 402539584,402539647,CN
 402539648,402539775,CA
 402539776,402540031,US
-402540032,402541119,CA
-402541120,402541247,US
-402541248,402541311,CA
+402540032,402541311,CA
 402541312,402541567,US
 402541568,402541823,CA
 402541824,402542079,US
 402542080,402542335,CA
 402542336,402542591,US
 402542592,402542847,CA
-402542848,402543135,US
-402543136,402543167,CA
-402543168,402543295,US
-402543296,402543303,CA
-402543304,402543311,US
-402543312,402543327,CA
+402542848,402543119,US
+402543120,402543167,CA
+402543168,402543231,US
+402543232,402543327,CA
 402543328,402543343,US
-402543344,402543367,CA
-402543368,402543375,US
-402543376,402543391,CA
+402543344,402543391,CA
 402543392,402543487,US
 402543488,402543551,CA
-402543552,402543599,US
-402543600,402543607,CA
-402543608,402544415,US
+402543552,402543583,US
+402543584,402543615,CA
+402543616,402544415,US
 402544416,402544423,CA
-402544424,402544511,US
-402544512,402544551,CA
-402544552,402544591,US
+402544424,402544479,US
+402544480,402544559,CA
+402544560,402544591,US
 402544592,402544607,CA
 402544608,402546687,US
 402546688,402546943,CA
@@ -6957,9 +6770,11 @@
 461111296,461127679,IN
 461127680,461131775,PH
 461131776,461135871,ID
-461135872,461143329,AU
+461135872,461143295,AU
+461143296,461143329,GB
 461143330,461143331,US
-461143332,461144063,AU
+461143332,461143551,GB
+461143552,461144063,AU
 461144064,461209599,KR
 461209600,461225983,SG
 461225984,461227007,WF
@@ -7137,7 +6952,7 @@
 520888320,520896511,DE
 520896512,520898303,BE
 520898304,520898559,US
-520898560,520900607,RU
+520898560,520900607,JP
 520900608,520902655,GB
 520902656,520902784,NL
 520902785,520912895,GB
@@ -7170,10 +6985,12 @@
 520994048,520994303,US
 520994304,520994559,DE
 520994560,520994815,SE
-520994816,521011199,BG
+520994816,520999423,BG
+520999424,520999935,DE
+520999936,521011199,BG
 521011200,521013247,FR
 521013248,521013503,RO
-521013504,521013759,PL
+521013504,521013759,US
 521013760,521014015,RO
 521014016,521014271,NL
 521014272,521018367,RO
@@ -7202,14 +7019,15 @@
 521030400,521030655,TR
 521030656,521031679,FR
 521031680,521035775,IR
-521035776,521037567,RO
+521035776,521036799,NL
+521036800,521037567,RO
 521037568,521037823,TH
 521037824,521039871,RO
 521039872,521043967,IR
 521043968,521048063,IT
 521048064,521052159,IR
 521052160,521052671,RO
-521052672,521052927,PL
+521052672,521052927,US
 521052928,521053183,RO
 521053184,521054207,SY
 521054208,521056255,GR
@@ -7219,7 +7037,9 @@
 521060352,521062399,RO
 521062400,521064447,ES
 521064448,521066495,GR
-521066496,521072639,RO
+521066496,521071103,RO
+521071104,521071615,NL
+521071616,521072639,RO
 521072640,521074687,GR
 521074688,521075711,GB
 521075712,521076479,RO
@@ -7241,7 +7061,7 @@
 521404416,521535487,NL
 521535488,521537535,GB
 521537536,521538559,DE
-521538560,521539583,RU
+521538560,521539583,IN
 521539584,521541631,BE
 521541632,521543679,DE
 521543680,521545727,RU
@@ -7406,7 +7226,11 @@
 522870784,522874879,RU
 522874880,522878975,UA
 522878976,522887167,RO
-522887168,522895359,UA
+522887168,522891263,UA
+522891264,522892287,US
+522892288,522893311,UA
+522893312,522894335,US
+522894336,522895359,UA
 522895360,522911743,RU
 522911744,522960895,UA
 522960896,522969087,RU
@@ -7465,7 +7289,9 @@
 528523264,528531455,UA
 528531456,528539647,RU
 528539648,528547839,UA
-528547840,528564223,RU
+528547840,528556031,RU
+528556032,528562175,US
+528562176,528564223,NL
 528564224,528572415,UA
 528572416,528588799,RU
 528588800,528596991,UA
@@ -7481,7 +7307,7 @@
 528664576,528666623,BY
 528666624,528668671,RU
 528668672,528670719,PL
-528670720,528674815,CA
+528670720,528674815,TH
 528674816,528676863,RO
 528676864,528678911,RU
 528678912,528680959,MD
@@ -7527,7 +7353,7 @@
 528836608,528838655,RU
 528838656,528840703,PL
 528840704,528842751,RU
-528842752,528859135,CA
+528842752,528859135,TH
 528859136,528861183,RO
 528861184,528863231,RU
 528863232,528867327,KZ
@@ -7636,8 +7462,7 @@
 531193856,531195903,IE
 531195904,531197951,IT
 531197952,531199999,GB
-531200000,531201023,DE
-531201024,531202047,BG
+531200000,531202047,DE
 531202048,531234815,CZ
 531234816,531236863,IE
 531236864,531238911,FR
@@ -7673,33 +7498,29 @@
 531351552,531355647,NL
 531355648,531357695,IR
 531357696,531361791,HU
-531361792,531367935,CH
+531361792,531365887,CH
 531367936,531369983,DE
-531369984,531372031,CH
+531369984,531371007,CH
 531372032,531372287,DE
-531372288,531372543,CH
 531372544,531372799,DE
-531372800,531373055,CH
 531373056,531374144,DE
-531374145,531376127,CH
 531376128,531377151,DE
-531377152,531382271,CH
 531382272,531390463,DE
-531390464,531392511,CH
 531392512,531398655,DE
 531398656,531400703,RU
 531400704,531402751,UA
 531402752,531404799,LU
 531404800,531406847,FI
 531406848,531408895,FR
-531408896,531409407,DE
-531409408,531409919,NL
+531408896,531409919,PL
 531409920,531410943,FR
 531410944,531415039,PL
 531415040,531423231,RU
 531423232,531424255,LT
-531424256,531427327,FR
-531427328,531427503,GB
+531424256,531425279,FR
+531425280,531426559,GB
+531426560,531426815,FR
+531426816,531427503,GB
 531427504,531427511,IT
 531427512,531427967,GB
 531427968,531427983,IT
@@ -7771,7 +7592,8 @@
 532303872,532305919,PL
 532305920,532307967,NO
 532307968,532310015,RU
-532310016,532312063,GR
+532310016,532311039,GR
+532311040,532312063,BG
 532312064,532312983,JE
 532312984,532312991,GB
 532312992,532314111,JE
@@ -7789,7 +7611,8 @@
 532344320,532344371,FR
 532344372,532344372,GB
 532344373,532344575,FR
-532344576,532346367,GB
+532344576,532344831,NL
+532344832,532346367,GB
 532346368,532346623,NL
 532346624,532347391,GB
 532347392,532347903,DE
@@ -7833,9 +7656,7 @@
 532692992,532700927,CZ
 532700928,532701183,SK
 532701184,532703231,GB
-532703232,532704511,RU
-532704512,532704767,NL
-532704768,532705279,RU
+532703232,532705279,RU
 532705280,532709375,NL
 532709376,532725759,RU
 532725760,532729855,SE
@@ -8255,19 +8076,29 @@
 598999040,599064575,FR
 599064576,599130111,US
 599130112,599261183,CA
-599261184,599608829,US
+599261184,599359487,US
+599359488,599375871,SG
+599375872,599429472,US
+599429473,599429473,SG
+599429474,599608829,US
 599608830,599608830,GB
 599608831,599609659,US
 599609660,599609660,GB
 599609661,599615125,US
 599615126,599615126,GB
-599615127,600164504,US
+599615127,599621631,US
+599621632,599638015,SG
+599638016,600153368,US
+600153369,600153369,SG
+600153370,600164504,US
 600164505,600164505,IE
 600164506,600169106,US
 600169107,600169107,GB
 600169108,600171164,US
 600171165,600171165,GB
-600171166,600342898,US
+600171166,600243604,US
+600243605,600243605,SG
+600243606,600342898,US
 600342899,600342899,IN
 600342900,600356283,US
 600356284,600356284,IN
@@ -8275,7 +8106,11 @@
 600374234,600374234,IN
 600374235,600376938,US
 600376939,600376939,AU
-600376940,603979775,US
+600376940,602574473,US
+602574474,602574474,GB
+602574475,602992238,US
+602992239,602992239,SG
+602992240,603979775,US
 603979776,603980799,CN
 603980800,603981823,NP
 603981824,604110847,CN
@@ -8309,6 +8144,7 @@
 620703744,620704767,AU
 620704768,620705791,BD
 620705792,620706815,HK
+620706816,620707839,PH
 620707840,620708863,IN
 620708864,620709887,HK
 620709888,620711935,AU
@@ -8318,7 +8154,8 @@
 620716288,620716543,PH
 620716544,620716799,BE
 620716800,620718079,PK
-620718080,620720127,IN
+620718080,620718591,MV
+620718592,620720127,IN
 620720128,620721151,AU
 620721152,620722175,CN
 620722176,620723199,JP
@@ -8342,7 +8179,10 @@
 620743936,620744191,AU
 620744192,620744703,JP
 620744704,620745727,IN
-620745728,620746751,PK
+620745728,620745983,SG
+620745984,620746239,TH
+620746240,620746495,PH
+620746496,620746751,SK
 620746752,620747775,JP
 620747776,620748799,CN
 620748800,620751871,IN
@@ -8649,7 +8489,6 @@
 623790080,623792127,ES
 623792128,623794175,CZ
 623794176,623796223,ES
-623796224,623798271,GB
 623798272,623800319,GE
 623800320,623800575,NL
 623800576,623800831,LU
@@ -8715,9 +8554,7 @@
 624640640,624640703,ES
 624640704,624640751,FR
 624640752,624640755,GB
-624640756,624640783,FR
-624640784,624640787,ES
-624640788,624640811,FR
+624640756,624640811,FR
 624640812,624640815,GB
 624640816,624640823,FR
 624640824,624640827,GB
@@ -8726,17 +8563,13 @@
 624640936,624641183,FR
 624641184,624641187,CZ
 624641188,624641191,ES
-624641192,624641295,FR
-624641296,624641299,CZ
-624641300,624641375,FR
+624641192,624641375,FR
 624641376,624641407,LT
 624641408,624641535,FR
 624641536,624641551,IE
 624641552,624641855,FR
 624641856,624641887,GB
-624641888,624641983,FR
-624641984,624642015,ES
-624642016,624642035,FR
+624641888,624642035,FR
 624642036,624642039,ES
 624642040,624642299,FR
 624642300,624642303,ES
@@ -8748,9 +8581,7 @@
 624642816,624642831,LT
 624642832,624642911,FR
 624642912,624642943,IE
-624642944,624643091,FR
-624643092,624643095,FI
-624643096,624643107,FR
+624642944,624643107,FR
 624643108,624643111,GB
 624643112,624643211,FR
 624643212,624643215,CH
@@ -8803,9 +8634,7 @@
 624646672,624646687,GB
 624646688,624646719,FR
 624646720,624646735,ES
-624646736,624646791,FR
-624646792,624646795,IE
-624646796,624646911,FR
+624646736,624646911,FR
 624646912,624646927,LT
 624646928,624647171,FR
 624647172,624647183,ES
@@ -8921,9 +8750,7 @@
 624664068,624664071,ES
 624664072,624664351,FR
 624664352,624664367,ES
-624664368,624664495,FR
-624664496,624664511,ES
-624664512,624664527,FR
+624664368,624664527,FR
 624664528,624664531,ES
 624664532,624664599,FR
 624664600,624664603,GB
@@ -8949,7 +8776,9 @@
 624665904,624665919,FI
 624665920,624665999,FR
 624666000,624666015,GB
-624666016,624666167,FR
+624666016,624666079,FR
+624666080,624666111,CZ
+624666112,624666167,FR
 624666168,624666175,GB
 624666176,624666219,FR
 624666220,624666223,DE
@@ -8992,9 +8821,7 @@
 624668928,624668931,GB
 624668932,624669459,FR
 624669460,624669463,FI
-624669464,624669711,FR
-624669712,624669727,ES
-624669728,624669795,FR
+624669464,624669795,FR
 624669796,624669799,ES
 624669800,624669959,FR
 624669960,624669963,ES
@@ -9017,9 +8844,7 @@
 624671292,624671295,PL
 624671296,624671455,FR
 624671456,624671471,ES
-624671472,624672095,FR
-624672096,624672127,CZ
-624672128,624672547,FR
+624671472,624672547,FR
 624672548,624672551,ES
 624672552,624672951,FR
 624672952,624672959,ES
@@ -9044,7 +8869,8 @@
 624674480,624675019,FR
 624675020,624675023,DE
 624675024,624675027,BE
-624675028,624675047,FR
+624675028,624675031,DE
+624675032,624675047,FR
 624675048,624675055,ES
 624675056,624675647,FR
 624675648,624675651,FI
@@ -9116,9 +8942,7 @@
 624680752,624680767,FR
 624680768,624680783,CZ
 624680784,624680799,GB
-624680800,624680895,FR
-624680896,624680927,ES
-624680928,624681023,FR
+624680800,624681023,FR
 624681024,624681055,ES
 624681056,624681083,FR
 624681084,624681087,ES
@@ -9182,7 +9006,9 @@
 624684800,624684803,DE
 624684804,624684907,FR
 624684908,624684911,ES
-624684912,624685375,FR
+624684912,624685035,FR
+624685036,624685039,IT
+624685040,624685375,FR
 624685376,624685439,ES
 624685440,624685535,FR
 624685536,624685539,PT
@@ -9374,7 +9200,7 @@
 627218432,627220479,TJ
 627220480,627228671,RU
 627228672,627230719,GR
-627230720,627232767,IR
+627230720,627232767,ES
 627232768,627236863,PL
 627236864,627238911,IQ
 627240192,627240447,US
@@ -9643,7 +9469,7 @@
 630982400,630982655,RO
 630982656,630988799,IR
 630988800,630989311,RO
-630989312,630989567,PL
+630989312,630989567,US
 630989568,630990335,RO
 630990336,630990847,JE
 630990848,630992895,RO
@@ -9675,7 +9501,8 @@
 631027712,631027967,KR
 631027968,631028223,US
 631028224,631028351,GB
-631028352,631028735,US
+631028352,631028479,US
+631028480,631028735,CZ
 631028736,631029759,ES
 631029760,631033855,SE
 631033856,631034879,IT
@@ -9953,8 +9780,7 @@
 635871488,635871743,UA
 635871744,635873279,RU
 635873280,635873535,LU
-635873536,635873791,US
-635873792,635874047,SE
+635873536,635874047,US
 635874048,635874303,AR
 635874304,635874815,SG
 635874816,635875071,FR
@@ -9972,7 +9798,7 @@
 635878400,635878655,RU
 635878656,635878911,US
 635878912,635879167,FI
-635879168,635879423,AT
+635879168,635879423,US
 635879424,635894527,RU
 635894528,635894783,KZ
 635894784,635895807,RU
@@ -10466,9 +10292,19 @@
 666894336,671088639,ID
 671088640,675381247,US
 675381248,675397631,SG
-675397632,675422207,US
+675397632,675416063,US
+675416064,675416575,AU
+675416576,675417599,US
+675417600,675418111,AU
+675418112,675422207,US
 675422208,675430399,FR
-675430400,675447167,US
+675430400,675430407,US
+675430408,675430415,NL
+675430416,675430423,HK
+675430424,675430431,JP
+675430432,675431423,US
+675431424,675431935,AE
+675431936,675447167,US
 675447168,675447295,HK
 675447296,675447423,US
 675447424,675447551,BR
@@ -10552,7 +10388,9 @@
 676179872,676179903,IE
 676179904,676181599,US
 676181600,676181631,IE
-676181632,676192767,US
+676181632,676184063,US
+676184064,676185087,HK
+676185088,676192767,US
 676192768,676192895,HK
 676192896,676193023,IE
 676193024,676193535,US
@@ -10562,7 +10400,9 @@
 676194976,676195007,IE
 676195008,676195327,US
 676195328,676195359,IE
-676195360,676249599,US
+676195360,676199423,US
+676199424,676199935,HK
+676199936,676249599,US
 676249600,676251647,IN
 676251648,676254207,US
 676254208,676254463,NL
@@ -10762,7 +10602,8 @@
 677057536,677058559,IE
 677058560,677059583,US
 677059584,677060607,NL
-677060608,677101567,US
+677060608,677061631,IE
+677061632,677101567,US
 677101568,677117951,NL
 677117952,677134335,US
 677134336,677134591,IE
@@ -11105,8 +10946,8 @@
 677840448,677840463,NL
 677840464,677840495,IE
 677840496,677840511,AT
-677840512,677840543,NL
-677840544,677840559,IE
+677840512,677840527,NL
+677840528,677840559,IE
 677840560,677840575,AT
 677840576,677840591,NL
 677840592,677840623,IE
@@ -11235,7 +11076,8 @@
 677848320,677848335,FI
 677848336,677848351,US
 677848352,677848367,IE
-677848368,677848399,US
+677848368,677848383,US
+677848384,677848399,FI
 677848400,677848415,NL
 677848416,677848431,IE
 677848432,677848447,AT
@@ -11318,13 +11160,13 @@
 677853728,677853743,FI
 677853744,677853759,NL
 677853760,677853775,AT
-677853776,677853791,MY
+677853776,677853791,IE
 677853792,677853807,FI
 677853808,677853823,NL
 677853824,677853839,AT
 677853840,677853855,IE
 677853856,677853871,FI
-677853872,677853887,US
+677853872,677853887,NL
 677853888,677853903,AT
 677853904,677853919,IE
 677853920,677853935,FI
@@ -11347,8 +11189,8 @@
 678102528,678102783,IE
 678102784,678103039,FI
 678103040,678103295,AT
-678103296,678103807,FR
-678103808,678104063,GB
+678103296,678103551,FR
+678103552,678104063,GB
 678104064,678104319,FR
 678104320,678104575,FI
 678104576,678104831,AT
@@ -11556,12 +11398,23 @@
 691650560,691666943,GH
 691666944,691732479,NG
 691732480,691798015,TZ
-691798016,691806207,ZM
+691798016,691804159,ZM
+691804160,691805183,CD
+691805184,691806207,KE
 691806208,691830783,ZW
-691830784,691832319,ZM
+691830784,691832063,ZM
+691832064,691832319,KE
 691832320,691832831,ZA
-691832832,691857407,ZM
-691857408,691857919,KE
+691832832,691834879,KE
+691834880,691848703,ZM
+691848704,691849215,KE
+691849216,691851263,ZW
+691851264,691855615,ZM
+691855616,691856397,KE
+691856398,691856398,ZM
+691856399,691856639,KE
+691856640,691857151,ZM
+691857152,691857919,KE
 691857920,691858175,MU
 691858176,691858431,KE
 691858432,691859455,MU
@@ -11733,7 +11586,6 @@
 693019648,693020671,ZA
 693020672,693021695,TZ
 693021696,693022719,NG
-693022720,693023743,KE
 693024768,693026815,ZA
 693026816,693028863,CD
 693028864,693029887,ZA
@@ -11767,7 +11619,6 @@
 693065728,693066751,MW
 693066752,693067775,ZA
 693067776,693068799,GH
-693068800,693069823,TZ
 693069824,693071871,ZA
 693071872,693072895,ZW
 693072896,693073919,NG
@@ -11805,7 +11656,9 @@
 693107712,693239807,KE
 693239808,693370879,SN
 693370880,693403647,ZA
-693403648,693411839,KE
+693403648,693405695,KE
+693405696,693406207,MU
+693406208,693411839,KE
 693420032,693423103,UG
 693423104,693424127,KE
 693424128,693428223,UG
@@ -11855,8 +11708,7 @@
 696958976,696963071,TZ
 696963072,696967167,UG
 696967168,696971263,MZ
-696971264,696974335,KE
-696974336,696975359,LU
+696971264,696975359,KE
 696975360,696991743,GH
 696991744,697008127,NG
 697008128,697040895,KE
@@ -12625,7 +12477,23 @@
 736536576,736537599,CN
 736537600,736538623,IN
 736538624,736539647,AU
-736539648,736540671,SG
+736539648,736540007,SG
+736540008,736540011,HK
+736540012,736540015,MY
+736540016,736540019,JP
+736540020,736540023,IN
+736540024,736540027,CN
+736540028,736540031,AU
+736540032,736540035,PH
+736540036,736540263,SG
+736540264,736540267,HK
+736540268,736540271,MY
+736540272,736540275,JP
+736540276,736540279,IN
+736540280,736540283,CN
+736540284,736540287,AU
+736540288,736540291,PH
+736540292,736540671,SG
 736540672,736541695,IN
 736541696,736542719,HK
 736542720,736543743,KH
@@ -12663,7 +12531,7 @@
 736606208,736607231,HK
 736607232,736608255,JP
 736608256,736609279,NZ
-736609280,736610303,CN
+736609280,736610303,HK
 736610304,736611327,AU
 736611328,736612351,IN
 736612352,736613375,NP
@@ -12732,7 +12600,7 @@
 737173504,737174527,AU
 737174528,737175551,BD
 737175552,737177599,TW
-737177600,737178623,AU
+737177600,737178623,TH
 737178624,737179647,HK
 737179648,737180671,AU
 737180672,737184767,CN
@@ -13133,8 +13001,8 @@
 737882112,737883135,JP
 737883136,737884159,AU
 737884160,737886207,TW
-737886208,737886975,PH
-737886976,737887231,HK
+737886208,737886719,PH
+737886720,737887231,HK
 737887232,737888255,KR
 737888256,737889279,IN
 737889280,737890303,HK
@@ -13166,7 +13034,7 @@
 737918976,737919999,CN
 737920000,737921023,HK
 737921024,737922047,AU
-737922048,737923071,NZ
+737922048,737923071,TH
 737923072,737924095,MY
 737924096,737927167,IN
 737927168,737929215,HK
@@ -13538,7 +13406,9 @@
 757696512,757697535,DE
 757697536,757699327,US
 757699328,757699583,TW
-757699584,757711871,US
+757699584,757700607,US
+757700608,757702655,PR
+757702656,757711871,US
 757711872,757712127,AU
 757712128,757714175,US
 757714176,757714431,JP
@@ -13644,7 +13514,9 @@
 757803008,757807871,US
 757807872,757808127,RU
 757808128,757808383,JP
-757808384,757809151,US
+757808384,757808639,US
+757808640,757808895,DE
+757808896,757809151,US
 757809152,757809407,CA
 757809408,757809663,RO
 757809664,757809919,GB
@@ -13687,22 +13559,28 @@
 758684672,758684927,BR
 758684928,758685183,IN
 758685184,758685695,AU
-758685696,758691839,US
-758691840,758692863,DE
-758692864,758700031,US
+758685696,758700031,US
 758700032,758702079,CA
 758702080,758704127,GR
 758704128,758706175,NL
 758706176,758710271,GR
 758710272,758743039,US
-758743040,758745087,CA
+758743040,758744679,CA
+758744680,758744687,US
+758744688,758744751,CA
+758744752,758744767,US
+758744768,758744879,CA
+758744880,758744887,US
+758744888,758745087,CA
 758745088,758745727,US
 758745728,758745791,CA
 758745792,758745823,US
-758745824,758745831,CA
-758745832,758745855,US
+758745824,758745839,CA
+758745840,758745855,US
 758745856,758747135,CA
-758747136,758747231,US
+758747136,758747199,US
+758747200,758747215,CA
+758747216,758747231,US
 758747232,758747327,CA
 758747328,758747375,US
 758747376,758747903,CA
@@ -13716,78 +13594,55 @@
 758748928,758749439,CA
 758749440,758749519,US
 758749520,758749535,CA
-758749536,758749567,US
-758749568,758749695,CA
+758749536,758749551,US
+758749552,758749695,CA
 758749696,758749951,US
 758749952,758750207,CA
-758750208,758750975,US
-758750976,758751039,CA
-758751040,758751167,US
-758751168,758751487,CA
+758750208,758750463,US
+758750464,758750719,CA
+758750720,758750975,US
+758750976,758751487,CA
 758751488,758751999,US
-758752000,758752031,CA
-758752032,758752063,US
-758752064,758752095,CA
-758752096,758752191,US
+758752000,758752127,CA
+758752128,758752191,US
 758752192,758752199,CA
 758752200,758752207,FI
-758752208,758752255,US
+758752208,758752223,US
+758752224,758752239,CA
+758752240,758752255,US
 758752256,758752511,CA
 758752512,758752671,US
 758752672,758752687,CA
 758752688,758752735,US
-758752736,758752831,CA
-758752832,758752895,US
-758752896,758752927,CA
-758752928,758752959,US
-758752960,758753279,CA
+758752736,758753279,CA
 758753280,758753535,US
-758753536,758754303,CA
-758754304,758754431,US
-758754432,758754559,CA
-758754560,758755071,US
-758755072,758755327,CA
+758753536,758754047,CA
+758754048,758754431,US
+758754432,758755327,CA
 758755328,758755839,US
 758755840,758756351,CA
 758756352,758756863,US
-758756864,758756927,CA
-758756928,758757055,US
-758757056,758757183,CA
-758757184,758757311,US
-758757312,758757375,CA
-758757376,758758143,US
-758758144,758759487,CA
-758759488,758759615,US
-758759616,758759743,CA
-758759744,758759807,US
-758759808,758759839,CA
-758759840,758759903,US
-758759904,758759935,CA
+758756864,758757375,CA
+758757376,758757631,US
+758757632,758757887,CA
+758757888,758758143,US
+758758144,758759935,CA
 758759936,758760191,US
 758760192,758760447,CA
 758760448,758760703,US
-758760704,758760799,CA
-758760800,758760895,US
-758760896,758762495,CA
+758760704,758762495,CA
 758762496,758762751,US
 758762752,758764031,CA
 758764032,758764287,US
 758764288,758764679,CA
-758764680,758764759,US
-758764760,758764767,CA
+758764680,758764703,US
+758764704,758764719,CA
+758764720,758764751,US
+758764752,758764767,CA
 758764768,758764799,US
-758764800,758764863,CA
-758764864,758764927,US
-758764928,758765183,CA
-758765184,758765247,US
-758765248,758765279,CA
-758765280,758765311,US
-758765312,758765375,CA
-758765376,758765471,US
-758765472,758765503,CA
+758764800,758765503,CA
 758765504,758765567,CN
-758765568,758765583,US
-758765584,758765631,CA
+758765568,758765631,CA
 758765632,758765647,US
 758765648,758765663,CA
 758765664,758765695,US
@@ -13795,11 +13650,7 @@
 758765952,758765975,US
 758765976,758765983,CA
 758765984,758766015,US
-758766016,758766047,CA
-758766048,758766063,US
-758766064,758766103,CA
-758766104,758766111,US
-758766112,758766143,CA
+758766016,758766143,CA
 758766144,758766303,US
 758766304,758766319,CA
 758766320,758766335,US
@@ -13809,30 +13660,24 @@
 758766528,758766575,US
 758766576,758766583,CA
 758766584,758766847,US
-758766848,758767615,CA
-758767616,758767871,US
-758767872,758769279,CA
+758766848,758769279,CA
 758769280,758769359,US
 758769360,758769367,CA
 758769368,758769375,US
-758769376,758769391,CA
-758769392,758769407,US
-758769408,758769663,CA
+758769376,758769663,CA
 758769664,758769751,US
-758769752,758769759,CA
-758769760,758769855,US
+758769752,758769791,CA
+758769792,758769855,US
 758769856,758769919,CA
 758769920,758770175,US
-758770176,758770271,CA
-758770272,758770303,US
-758770304,758770335,CA
-758770336,758770367,US
-758770368,758770431,CA
-758770432,758770719,US
-758770720,758770751,CA
+758770176,758770431,CA
+758770432,758770687,US
+758770688,758770751,CA
 758770752,758770847,US
 758770848,758770863,CA
-758770864,758771199,US
+758770864,758770927,US
+758770928,758770943,CA
+758770944,758771199,US
 758771200,758771711,CA
 758771712,758772991,US
 758772992,758773759,CA
@@ -13840,7 +13685,9 @@
 758774272,758775807,CA
 758775808,758779903,US
 758779904,758783999,CA
-758784000,758796287,US
+758784000,758785023,US
+758785024,758785535,CA
+758785536,758796287,US
 758796288,758804479,CA
 758804480,758811017,US
 758811018,758811018,NL
@@ -13951,10 +13798,24 @@
 759054336,759062527,CA
 759062528,759068671,US
 759068672,759069695,NL
-759069696,759086079,US
-759086080,759086591,HK
-759086592,759086847,SG
-759086848,759087103,US
+759069696,759086335,US
+759086336,759086847,CA
+759086848,759086863,PR
+759086864,759086879,VI
+759086880,759086895,VG
+759086896,759086911,BS
+759086912,759086927,JM
+759086928,759086943,KY
+759086944,759086959,DM
+759086960,759086975,BB
+759086976,759086991,GD
+759086992,759087007,GP
+759087008,759087023,MQ
+759087024,759087039,MS
+759087040,759087055,TC
+759087056,759087071,MF
+759087072,759087087,VC
+759087088,759087103,PM
 759087104,759100278,CA
 759100279,759100279,NL
 759100280,759103487,CA
@@ -14129,17 +13990,15 @@
 759694208,759694303,US
 759694304,759694319,CA
 759694320,759695231,US
-759695232,759696143,CA
-759696144,759696159,US
-759696160,759696223,CA
-759696224,759696255,US
-759696256,759696263,CA
+759695232,759696263,CA
 759696264,759696335,US
 759696336,759696351,CA
-759696352,759696463,US
+759696352,759696415,US
+759696416,759696447,CA
+759696448,759696463,US
 759696464,759696479,CA
-759696480,759696591,US
-759696592,759696599,CA
+759696480,759696575,US
+759696576,759696599,CA
 759696600,759696607,US
 759696608,759699263,CA
 759699264,759699279,US
@@ -14155,9 +14014,7 @@
 759700064,759700223,US
 759700224,759700479,CA
 759700480,759700607,US
-759700608,759700623,CA
-759700624,759700639,US
-759700640,759700735,CA
+759700608,759700735,CA
 759700736,759700863,US
 759700864,759701759,CA
 759701760,759702015,US
@@ -14184,13 +14041,13 @@
 759711360,759711615,CA
 759711616,759711647,US
 759711648,759711655,CA
-759711656,759711711,US
-759711712,759711775,CA
-759711776,759711807,US
-759711808,759711839,CA
-759711840,759711855,US
-759711856,759711871,CA
-759711872,759712095,US
+759711656,759711679,US
+759711680,759711695,CA
+759711696,759711711,US
+759711712,759711871,CA
+759711872,759712015,US
+759712016,759712063,CA
+759712064,759712095,US
 759712096,759712111,CA
 759712112,759712127,US
 759712128,759712255,CA
@@ -14201,16 +14058,17 @@
 759712896,759713023,US
 759713024,759721215,CA
 759721216,759721231,US
-759721232,759721263,CA
-759721264,759721375,US
-759721376,759725823,CA
-759725824,759725855,US
-759725856,759791615,CA
+759721232,759721279,CA
+759721280,759721343,US
+759721344,759791615,CA
 759791616,759802367,US
 759802368,759803391,CA
 759803392,759803903,US
 759803904,759804927,GB
-759804928,759824639,US
+759804928,759807487,US
+759807488,759807743,ES
+759807744,759807999,AU
+759808000,759824639,US
 759824640,759824895,SA
 759824896,759825151,CR
 759825152,759825407,US
@@ -14261,7 +14119,9 @@
 759835648,759835903,SE
 759835904,759836159,US
 759836160,759836415,SE
-759836416,759839999,US
+759836416,759839231,US
+759839232,759839487,GB
+759839488,759839999,US
 759840000,759840255,CA
 759840256,759840511,GB
 759840512,759840767,US
@@ -14271,8 +14131,10 @@
 759889920,759922687,JP
 759922688,759955455,GB
 759955456,759963647,US
-759963648,759966079,NL
-759966080,759966207,US
+759963648,759966135,NL
+759966136,759966143,US
+759966144,759966159,NL
+759966160,759966207,US
 759966208,759966719,NL
 759966720,759966915,FR
 759966916,759966916,TF
@@ -14357,7 +14219,6 @@
 762368000,762372095,CN
 762372096,762373119,FJ
 762373120,762376191,CN
-762376192,762377215,HK
 762377216,762377471,US
 762377472,762378239,AU
 762378240,762380287,IN
@@ -14375,8 +14236,7 @@
 762397696,762398719,CA
 762398720,762399743,CN
 762399744,762400767,IN
-762400768,762401023,HK
-762401024,762401279,US
+762400768,762401279,HK
 762401280,762401791,KR
 762401792,762402815,TH
 762402816,762403839,IN
@@ -14456,7 +14316,7 @@
 762499072,762500095,JP
 762500096,762502143,IN
 762502144,762503167,AU
-762503168,762504191,IN
+762503168,762504191,CA
 762504192,762505215,CN
 762505216,762506239,BD
 762507264,762510335,IN
@@ -14667,7 +14527,7 @@
 762848768,762849279,BD
 762849280,762850303,IN
 762850304,762851327,HK
-762851328,762852351,IN
+762851328,762852351,JP
 762852352,762853375,MY
 762853376,762855423,IN
 762855424,762857471,KR
@@ -14718,7 +14578,6 @@
 762909952,762910719,HK
 762910720,762911743,VN
 762911744,762912767,IN
-762912768,762913791,HK
 762913792,762914815,MY
 762914816,762915839,ID
 762915840,762916863,IN
@@ -14962,7 +14821,10 @@
 763326464,763327487,US
 763327488,763328511,CN
 763328512,763329535,IN
-763329536,763331583,CN
+763329536,763329791,HK
+763329792,763330047,CN
+763330048,763330303,HK
+763330304,763331583,CN
 763331584,763332607,ID
 763332608,763333631,IN
 763333632,763334655,BN
@@ -14986,6 +14848,16 @@
 763354112,763360255,IN
 763360256,763362303,BD
 763362304,763363327,VN
+765460480,765461503,BR
+765461504,765462527,CL
+765463552,765464575,CL
+765464576,765465599,BR
+765466624,765467647,BR
+765467648,765468671,AR
+765468672,765485055,BR
+765487104,765488127,BR
+765489152,765490175,BR
+765494272,765495295,CR
 767557632,767623167,ZA
 767623168,767688703,HK
 767688704,767754239,ZA
@@ -15450,6 +15322,7 @@
 770485760,770486271,CL
 770486272,770488319,BR
 770488320,770489343,CL
+770489344,770490367,BR
 770490368,770491391,BO
 770491392,770499583,BR
 770499584,770500607,PE
@@ -15464,6 +15337,7 @@
 770520064,770521087,AR
 770521088,770528255,BR
 770528256,770529279,HN
+770529280,770530303,TT
 770530304,770540543,BR
 770540544,770542591,CL
 770542592,770549759,BR
@@ -15479,19 +15353,63 @@
 770577408,770578431,CL
 770578432,770579455,BR
 770579456,770580479,NI
+770580480,770581503,BR
 770581504,770582527,PY
 770582528,770585599,BR
 770585600,770586623,AR
 770586624,770587647,EC
+770587648,770588671,CL
 770588672,770598911,BR
+770598912,770599935,AR
 770599936,770608127,BR
+770608128,770609151,HN
 770609152,770610175,CO
-770613248,770621439,BR
+770611200,770612223,CL
+770612224,770613247,HN
+770613248,770617343,BR
+770617344,770618367,CL
+770618368,770619391,CO
+770619392,770620415,BR
+770620416,770621439,MX
 770621440,770622463,AR
-770624512,770625535,BR
+770622464,770623487,CO
+770623488,770626559,BR
 770626560,770627583,AR
 770627584,770628607,EC
+770628608,770629631,AR
+770629632,770635775,BR
 770635776,770636799,AR
+770636800,770641919,BR
+770641920,770642943,MX
+770642944,770643455,BR
+770643456,770643967,PE
+770643968,770644991,BR
+770644992,770646015,CL
+770646016,770648063,AR
+770648064,770649087,BR
+770649088,770650111,PY
+770650112,770651135,CL
+770651136,770653183,BR
+770653184,770654207,AR
+770654208,770655231,CR
+770655232,770656255,MX
+770656256,770657279,BR
+770657280,770658303,MX
+770658304,770659327,BR
+770659328,770660351,AR
+770660352,770661375,CO
+770661376,770662399,AR
+770662400,770666495,CL
+770667008,770667263,AR
+770667264,770667519,CO
+770667520,770668543,AR
+770668544,770669567,CL
+770669568,770671615,AR
+770671616,770678783,BR
+770678784,770679807,EC
+770679808,770689023,BR
+770691072,770692095,CL
+770692096,770703359,BR
 770703360,771227647,EG
 771227648,771229695,IN
 771229696,771230719,CN
@@ -15499,7 +15417,9 @@
 771237376,771237887,MY
 771237888,771238911,IN
 771238912,771239935,US
-771239936,771241983,AU
+771239936,771241471,AU
+771241472,771241727,IN
+771241728,771241983,SG
 771241984,771245055,IN
 771245056,771246079,HK
 771246080,771247103,KR
@@ -15585,7 +15505,7 @@
 771424256,771425279,CN
 771425280,771426303,ID
 771426304,771427327,CN
-771427328,771428351,IN
+771427840,771428351,IN
 771428352,771430399,CN
 771430400,771431423,PH
 771431424,771435519,IN
@@ -15733,7 +15653,8 @@
 772888576,772890623,GB
 772890624,772892033,NL
 772892034,772892041,RU
-772892042,772892671,NL
+772892042,772892543,NL
+772892544,772892671,RU
 772892672,772894719,GB
 772894720,772896767,PL
 772896768,772898815,RS
@@ -15743,7 +15664,8 @@
 772904960,772907007,IT
 772907008,772909055,GB
 772909056,772910079,SE
-772910080,772911103,DE
+772910080,772910591,SG
+772910592,772911103,LT
 772911104,772913151,GB
 772913152,772915199,SE
 772915200,772917247,FI
@@ -16358,10 +16280,10 @@
 778304306,778304306,SI
 778304307,778305535,AL
 778305536,778371071,IR
-778371072,778388479,GB
-778388480,778389503,DE
-778389504,778395647,GB
-778395648,778436607,DE
+778371072,778388893,GB
+778388894,778388894,DE
+778388895,778403839,GB
+778403840,778436607,DE
 778436608,778461183,RO
 778461184,778461439,TR
 778461440,778462207,US
@@ -16382,8 +16304,7 @@
 778475776,778476031,RO
 778476032,778476287,IE
 778476288,778477567,RO
-778477568,778477695,NL
-778477696,778479615,ES
+778477568,778479615,ES
 778479616,778480127,RO
 778480128,778480639,GB
 778480640,778480895,FR
@@ -16523,9 +16444,7 @@
 778669212,778669215,ES
 778669216,778669451,FR
 778669452,778669455,ES
-778669456,778669551,FR
-778669552,778669567,CZ
-778669568,778669663,FR
+778669456,778669663,FR
 778669664,778669695,FI
 778669696,778669823,FR
 778669824,778669855,ES
@@ -16726,9 +16645,7 @@
 778692620,778692623,ES
 778692624,778692743,FR
 778692744,778692747,ES
-778692748,778692767,FR
-778692768,778692783,ES
-778692784,778692827,FR
+778692748,778692827,FR
 778692828,778692831,GB
 778692832,778692891,FR
 778692892,778692895,GB
@@ -16833,7 +16750,10 @@
 778764288,778822655,HU
 778822656,778823679,UA
 778823680,778829823,HU
-778829824,778862591,RO
+778829824,778839856,GB
+778839857,778839857,RO
+778839858,778854399,GB
+778854400,778862591,RO
 778862592,778895359,GB
 778895360,778960895,LV
 778960896,779026431,DE
@@ -16946,13 +16866,13 @@
 782318080,782318207,SA
 782318208,782318335,IL
 782318336,782318463,AU
-782318464,782318591,RU
+782318464,782318591,EE
 782318592,782318719,ES
-782318720,782318847,RU
+782318720,782318847,EE
 782318848,782318975,IS
 782318976,782319103,BE
 782319104,782319231,KZ
-782319232,782319359,RU
+782319232,782319359,EE
 782319360,782319487,MD
 782319488,782319615,RU
 782319616,782335999,ME
@@ -17061,7 +16981,7 @@
 783247360,783251455,PL
 783251456,783255551,RU
 783255552,783259647,UA
-783259648,783260671,RO
+783259648,783260671,IN
 783260672,783261695,ES
 783261696,783263743,UA
 783263744,783265791,BY
@@ -17161,12 +17081,10 @@
 784155512,784155519,CZ
 784155520,784155611,DE
 784155612,784155615,CH
-784155616,784155619,NL
-784155620,784155623,BE
+784155616,784155623,DE
 784155624,784155631,AT
 784155632,784155639,GB
-784155640,784155640,CZ
-784155641,784169215,DE
+784155640,784169215,DE
 784169216,784169231,AL
 784169232,784169247,BG
 784169248,784169263,CZ
@@ -17640,7 +17558,7 @@
 788217856,788226047,RU
 788226048,788234239,CY
 788234240,788242431,SA
-788242432,788250623,IR
+788242432,788250623,ES
 788250624,788258815,KG
 788258816,788259071,IR
 788259072,788259327,DE
@@ -17781,15 +17699,16 @@
 793378816,793395199,JP
 793395200,793411583,AU
 793411584,793444351,SG
-793444352,793453217,US
+793444352,793453217,CN
 793453218,793453218,HK
-793453219,793454975,US
+793453219,793454975,CN
 793454976,793454976,HK
-793454977,793490778,US
+793454977,793490778,CN
 793490779,793490779,HK
-793490780,793503318,US
+793490780,793503318,CN
 793503319,793503319,HK
-793503320,794329087,US
+793503320,793509887,CN
+793509888,794329087,US
 794329088,794361855,SG
 794361856,794369288,HK
 794369289,794369289,CN
@@ -17856,7 +17775,8 @@
 825448448,825454079,CA
 825454080,825458687,CN
 825458688,825470975,DE
-825470976,825484287,CN
+825470976,825479167,US
+825479168,825484287,CN
 825484288,825491455,US
 825491456,825753599,CN
 825753600,826277887,KR
@@ -18111,9 +18031,17 @@
 858145696,858145727,GB
 858145728,858145791,FR
 858145792,858146879,GB
-858146880,858147583,FR
-858147584,858147711,GB
-858147712,858148863,FR
+858146880,858147391,FR
+858147392,858147455,GB
+858147456,858147519,FR
+858147520,858147711,GB
+858147712,858148143,FR
+858148144,858148159,GB
+858148160,858148391,FR
+858148392,858148395,GB
+858148396,858148607,FR
+858148608,858148671,GB
+858148672,858148863,FR
 858148864,858149887,GB
 858149888,858149919,FR
 858149920,858149935,GB
@@ -18143,19 +18071,23 @@
 858155544,858155551,DE
 858155552,858155711,FR
 858155712,858155839,DE
-858155840,858156863,FR
+858155840,858155887,FR
+858155888,858155903,LT
+858155904,858156495,FR
+858156496,858156511,NL
+858156512,858156863,FR
 858156864,858156991,DE
 858156992,858157055,FR
 858157056,858158079,DE
 858158080,858158111,FR
-858158112,858158207,DE
-858158208,858158271,FR
-858158272,858158399,DE
+858158112,858158399,DE
 858158400,858158527,FR
 858158528,858158655,DE
 858158656,858158783,FR
 858158784,858158847,DE
-858158848,858158975,FR
+858158848,858158863,FR
+858158864,858158879,BE
+858158880,858158975,FR
 858158976,858159039,DE
 858159040,858159167,FR
 858159168,858159231,DE
@@ -18173,14 +18105,22 @@
 858159652,858159652,PT
 858159653,858159655,FR
 858159656,858159656,FI
-858159657,858159763,FR
+858159657,858159679,FR
+858159680,858159743,DE
+858159744,858159763,FR
 858159764,858159767,DE
 858159768,858159807,FR
 858159808,858159871,DE
 858159872,858160127,FR
 858160128,858161151,DE
 858161152,858163199,PL
-858163200,858165247,FR
+858163200,858164351,FR
+858164352,858164415,PL
+858164416,858164735,FR
+858164736,858164863,PL
+858164864,858165119,FR
+858165120,858165183,PL
+858165184,858165247,FR
 858165248,858165311,PL
 858165312,858165375,FR
 858165376,858165439,PL
@@ -18250,21 +18190,62 @@
 860096384,860096511,ES
 860096512,860100607,FR
 860100608,860100735,ES
-860100736,860102075,FR
-860102076,860102079,GB
-860102080,860110355,FR
+860100736,860109695,FR
+860109696,860109823,NL
+860109824,860110207,FR
+860110208,860110215,DE
+860110216,860110287,FR
+860110288,860110295,DE
+860110296,860110355,FR
 860110356,860110359,DE
 860110360,860110519,FR
 860110520,860110523,GB
-860110524,860110687,FR
+860110524,860110567,FR
+860110568,860110575,DE
+860110576,860110687,FR
 860110688,860110703,GB
-860110704,860110711,FR
-860110712,860110715,DE
-860110716,860119679,FR
+860110704,860110715,DE
+860110716,860111615,FR
+860111616,860111743,ES
+860111744,860119207,FR
+860119208,860119215,DE
+860119216,860119679,FR
 860119680,860119807,ES
-860119808,860121599,FR
+860119808,860120511,FR
+860120512,860120543,FI
+860120544,860121599,FR
 860121600,860121727,IT
-860121728,860159999,FR
+860121728,860131327,FR
+860131328,860134399,PL
+860134400,860139711,FR
+860139712,860139839,DE
+860139840,860140031,FR
+860140032,860140095,DE
+860140096,860140159,FR
+860140160,860140223,DE
+860140224,860140239,FR
+860140240,860140255,IT
+860140256,860141903,FR
+860141904,860141919,NL
+860141920,860141935,PT
+860141936,860141951,CH
+860141952,860141967,IE
+860141968,860141983,CZ
+860141984,860141999,GB
+860142000,860142015,PL
+860142016,860142591,FR
+860142592,860143615,DE
+860143616,860147711,FR
+860147712,860147775,GB
+860147776,860147903,FR
+860147904,860147967,GB
+860147968,860148287,FR
+860148288,860148351,GB
+860148352,860148735,FR
+860148736,860149759,GB
+860149760,860157183,FR
+860157184,860157311,IT
+860157312,860159999,FR
 860160000,860553215,GB
 860553216,860618751,FR
 860618752,860684287,GB
@@ -18282,8 +18263,10 @@
 861536256,861601791,GB
 861601792,861667327,FR
 861667328,862470143,GB
-862470144,862486527,IE
-862486528,864550911,GB
+862470144,862519295,IE
+862519296,862552063,GB
+862552064,862584831,NL
+862584832,864550911,GB
 864550912,864649215,NL
 864649216,864665599,GB
 864665600,864681983,NL
@@ -18460,9 +18443,7 @@
 872308704,872308735,ES
 872308736,872309883,FR
 872309884,872309884,PT
-872309885,872310799,FR
-872310800,872310815,ES
-872310816,872310911,FR
+872309885,872310911,FR
 872310912,872311039,DE
 872311040,872311167,IE
 872311168,872311231,FR
@@ -18479,7 +18460,9 @@
 872312384,872312447,IT
 872312448,872312511,FR
 872312512,872312575,IE
-872312576,872312703,FR
+872312576,872312607,FR
+872312608,872312623,GB
+872312624,872312703,FR
 872312704,872312767,ES
 872312768,872316797,FR
 872316798,872316798,PT
@@ -18541,7 +18524,9 @@
 872326724,872326727,GB
 872326728,872326815,FR
 872326816,872326823,GB
-872326824,872327615,FR
+872326824,872327183,FR
+872327184,872327191,IT
+872327192,872327615,FR
 872327616,872327679,ES
 872327680,872327807,FR
 872327808,872327811,FI
@@ -19017,7 +19002,9 @@
 878545660,878545661,GB
 878545662,878545915,US
 878545916,878545917,GB
-878545918,878567423,US
+878545918,878546431,US
+878546432,878547455,SE
+878547456,878567423,US
 878567424,878568447,BH
 878568448,878576895,US
 878576896,878577151,IE
@@ -19123,7 +19110,8 @@
 878698752,878699007,JP
 878699008,878699263,US
 878699264,878699519,SE
-878699520,878702591,US
+878699520,878699775,BH
+878699776,878702591,US
 878702592,878702847,BR
 878702848,878703103,AU
 878703104,878703359,SG
@@ -19154,8 +19142,8 @@
 878772288,878772735,BR
 878772736,878788623,US
 878788624,878788671,BR
-878788672,878789119,US
-878789120,878790655,BR
+878788672,878788863,US
+878788864,878790655,BR
 878790656,878804991,US
 878804992,878805247,AT
 878805248,878806015,GB
@@ -19173,7 +19161,8 @@
 878808192,878808319,NL
 878808320,878808831,AT
 878808832,878808991,NL
-878808992,878809087,US
+878808992,878809023,US
+878809024,878809087,AT
 878809088,878809343,NL
 878809344,878809599,IE
 878809600,878809855,GB
@@ -19197,10 +19186,8 @@
 878822656,878837759,US
 878837760,878837775,AU
 878837776,878837887,US
-878837888,878838143,AU
-878838144,878838271,US
-878838272,878838527,AU
-878838528,878841855,US
+878837888,878839039,AU
+878839040,878841855,US
 878841856,878841919,ZA
 878841920,878854143,US
 878854144,878854207,JP
@@ -19215,14 +19202,20 @@
 878857088,878857215,KR
 878857216,878857535,AU
 878857536,878857567,JP
-878857568,878857599,US
+878857568,878857583,HK
+878857584,878857599,SG
 878857600,878857727,JP
 878857728,878857983,HK
 878857984,878858239,JP
 878858240,878858367,SG
-878858368,878858495,US
-878858496,878858751,JP
-878858752,878862335,US
+878858368,878858815,JP
+878858816,878858879,SG
+878858880,878859263,JP
+878859264,878859391,SG
+878859392,878859519,US
+878859520,878859775,HK
+878859776,878860543,IN
+878860544,878862335,US
 878862336,878862975,HK
 878862976,878863103,US
 878863104,878863359,HK
@@ -19413,7 +19406,9 @@
 880269312,880271359,JP
 880271360,880275455,US
 880275456,880277503,IE
-880277504,880293356,US
+880277504,880277759,US
+880277760,880278015,BH
+880278016,880293356,US
 880293357,880293357,CL
 880293358,880543743,US
 880543744,880545791,CA
@@ -19478,14 +19473,19 @@
 881836544,881836799,NL
 881836800,881837055,IE
 881837056,881837311,SG
-881837312,881840127,US
+881837312,881837823,US
+881837824,881838591,AU
+881838592,881838847,AE
+881838848,881840127,US
 881840128,881840383,NL
 881840384,881840639,IE
 881840640,881840895,SG
 881840896,881841919,US
 881841920,881842687,FR
 881842688,881842943,AU
-881842944,881859327,US
+881842944,881843455,US
+881843456,881844223,AE
+881844224,881859327,US
 881859328,881859583,CA
 881859584,881868799,US
 881868800,881876991,IT
@@ -19818,7 +19818,8 @@
 908347952,908347959,ES
 908347960,908348143,FR
 908348144,908348159,LT
-908348160,908348415,FR
+908348160,908348287,FR
+908348288,908348415,BE
 908348416,908348543,IT
 908348544,908348671,FR
 908348672,908348799,ES
@@ -19925,7 +19926,9 @@
 908368640,908368767,IT
 908368768,908369023,FR
 908369024,908369055,CZ
-908369056,908369239,FR
+908369056,908369199,FR
+908369200,908369215,GB
+908369216,908369239,FR
 908369240,908369247,ES
 908369248,908369543,FR
 908369544,908369551,ES
@@ -20093,7 +20096,9 @@
 908408512,908408543,LT
 908408544,908408799,FR
 908408800,908408815,LT
-908408816,908409279,FR
+908408816,908409111,FR
+908409112,908409115,DE
+908409116,908409279,FR
 908409280,908409287,ES
 908409288,908409487,FR
 908409488,908409495,ES
@@ -20132,7 +20137,9 @@
 908420000,908420015,LT
 908420016,908420071,FR
 908420072,908420079,ES
-908420080,908420351,FR
+908420080,908420095,FR
+908420096,908420223,IT
+908420224,908420351,FR
 908420352,908420479,GB
 908420480,908420495,FR
 908420496,908420511,PT
@@ -20260,9 +20267,7 @@
 908441312,908441343,CZ
 908441344,908443263,FR
 908443264,908443391,BE
-908443392,908443487,FR
-908443488,908443519,GB
-908443520,908444159,FR
+908443392,908444159,FR
 908444160,908444223,DE
 908444224,908444667,FR
 908444668,908444671,DE
@@ -20323,8 +20328,8 @@
 908467328,908467967,FR
 908467968,908468095,BE
 908468096,908472319,FR
-908472320,908472575,PL
-908472576,908472671,FR
+908472320,908472639,PL
+908472640,908472671,FR
 908472672,908472767,PL
 908472768,908472831,FR
 908472832,908472991,PL
@@ -20388,7 +20393,9 @@
 908496896,908496959,GB
 908496960,908497023,FR
 908497024,908497151,GB
-908497152,908497279,FR
+908497152,908497231,FR
+908497232,908497247,GB
+908497248,908497279,FR
 908497280,908497343,GB
 908497344,908497471,FR
 908497472,908497535,GB
@@ -20405,7 +20412,7 @@
 908499776,908499903,FR
 908499904,908500991,DE
 908500992,908501407,FR
-908501408,908501439,GB
+908501408,908501439,CZ
 908501440,908501791,FR
 908501792,908501823,CZ
 908501824,908502399,FR
@@ -20420,7 +20427,9 @@
 908510912,908510975,PL
 908510976,908511487,FR
 908511488,908511551,PL
-908511552,908511743,FR
+908511552,908511615,FR
+908511616,908511679,PL
+908511680,908511743,FR
 908511744,908511807,PL
 908511808,908511871,FR
 908511872,908511999,PL
@@ -20436,8 +20445,8 @@
 908513344,908513375,GB
 908513376,908513535,FR
 908513536,908513727,GB
-908513728,908513791,FR
-908513792,908513855,GB
+908513728,908513775,FR
+908513776,908513855,GB
 908513856,908514047,FR
 908514048,908514143,GB
 908514144,908514239,FR
@@ -20460,9 +20469,7 @@
 908520192,908520959,FR
 908520960,908521087,IT
 908521088,908525567,FR
-908525568,908534239,CA
-908534240,908534271,GB
-908534272,908591103,CA
+908525568,908591103,CA
 908591104,910163967,US
 910163968,910197237,JP
 910197238,910197238,US
@@ -21192,7 +21199,10 @@
 1024330752,1024331775,AU
 1024331776,1024332799,US
 1024332800,1024333823,AU
-1024333824,1024335871,US
+1024333824,1024335103,US
+1024335104,1024335135,SG
+1024335136,1024335359,US
+1024335360,1024335871,SG
 1024335872,1024337919,IN
 1024337920,1024338943,US
 1024338944,1024340991,ZA
@@ -21369,7 +21379,9 @@
 1040465920,1040474111,DE
 1040474112,1040477183,CZ
 1040477184,1040477184,KG
-1040477185,1040482303,CZ
+1040477185,1040477951,CZ
+1040477952,1040478207,UA
+1040478208,1040482303,CZ
 1040482304,1040515071,BE
 1040515072,1040547839,GB
 1040547840,1040580607,RU
@@ -21425,7 +21437,9 @@
 1041629184,1041694719,ES
 1041694720,1041728655,FR
 1041728656,1041728671,IT
-1041728672,1041741567,FR
+1041728672,1041739775,FR
+1041739776,1041740031,IT
+1041740032,1041741567,FR
 1041741568,1041741823,ES
 1041741824,1041742335,FR
 1041742336,1041742591,ES
@@ -21441,7 +21455,9 @@
 1041750352,1041750367,DE
 1041750368,1041752319,FR
 1041752320,1041752575,AT
-1041752576,1041758463,FR
+1041752576,1041756113,FR
+1041756114,1041756114,DE
+1041756115,1041758463,FR
 1041758464,1041758719,ES
 1041758720,1041760255,FR
 1041760256,1041768447,DE
@@ -21533,9 +21549,10 @@
 1043897344,1043897855,NG
 1043897856,1043899391,GB
 1043899392,1043899647,CG
-1043899648,1043902463,GB
-1043902464,1043908607,US
-1043908608,1043910655,DE
+1043899648,1043908607,GB
+1043908608,1043910143,DE
+1043910144,1043910399,GB
+1043910400,1043910655,DE
 1043910656,1043919442,GB
 1043919443,1043919443,SS
 1043919444,1043920895,GB
@@ -21659,7 +21676,9 @@
 1044922368,1044930559,DE
 1044930560,1044931231,GB
 1044931232,1044931239,BE
-1044931240,1044932303,GB
+1044931240,1044931951,GB
+1044931952,1044931959,BE
+1044931960,1044932303,GB
 1044932304,1044932311,BE
 1044932312,1044933499,GB
 1044933500,1044933503,BE
@@ -21737,7 +21756,9 @@
 1045741960,1045741967,SE
 1045741968,1045745420,GB
 1045745421,1045745421,SE
-1045745422,1045746059,GB
+1045745422,1045745999,GB
+1045746000,1045746015,SE
+1045746016,1045746059,GB
 1045746060,1045746060,SE
 1045746061,1045746943,GB
 1045746944,1045747199,AT
@@ -21760,9 +21781,7 @@
 1046036480,1046052863,PL
 1046052864,1046061055,GB
 1046061056,1046069247,DE
-1046069248,1046075391,RU
-1046075392,1046077439,KZ
-1046077440,1046085631,RU
+1046069248,1046085631,RU
 1046085632,1046151167,IL
 1046151168,1046216703,DE
 1046216704,1046225647,NO
@@ -21821,7 +21840,9 @@
 1046490000,1046490007,DE
 1046490008,1046490591,GB
 1046490592,1046490599,DE
-1046490600,1046490831,GB
+1046490600,1046490601,GB
+1046490602,1046490602,DE
+1046490603,1046490831,GB
 1046490832,1046490839,DE
 1046490840,1046492471,GB
 1046492472,1046492479,DE
@@ -21891,11 +21912,11 @@
 1046507128,1046507135,DE
 1046507136,1046507519,GB
 1046507520,1046508543,DE
-1046508544,1046511815,GB
-1046511816,1046511823,DE
-1046511824,1046512583,GB
-1046512584,1046512599,DE
-1046512600,1046514687,GB
+1046508544,1046512583,GB
+1046512584,1046512591,DE
+1046512592,1046514591,GB
+1046514592,1046514623,DE
+1046514624,1046514687,GB
 1046514688,1046517759,DE
 1046517760,1046517959,GB
 1046517960,1046517967,DE
@@ -22031,21 +22052,11 @@
 1047314432,1047322623,SE
 1047322624,1047330815,IT
 1047330816,1047339007,RU
-1047339008,1047340107,SE
-1047340108,1047340111,NO
-1047340112,1047340863,SE
+1047339008,1047340863,SE
 1047340864,1047340927,NO
-1047340928,1047342351,SE
-1047342352,1047342355,NO
-1047342356,1047342387,SE
-1047342388,1047342391,NO
-1047342392,1047342879,SE
+1047340928,1047342879,SE
 1047342880,1047342887,FI
-1047342888,1047343823,SE
-1047343824,1047343831,NO
-1047343832,1047345431,SE
-1047345432,1047345439,NO
-1047345440,1047346431,SE
+1047342888,1047346431,SE
 1047346432,1047346687,FI
 1047346688,1047347199,SE
 1047347200,1047363583,DE
@@ -22071,45 +22082,158 @@
 1047535360,1047535615,BE
 1047535616,1047551999,DE
 1047552000,1047560191,RU
-1047560192,1047563431,DE
+1047560192,1047560223,CH
+1047560224,1047560815,DE
+1047560816,1047560819,KE
+1047560820,1047563287,DE
+1047563288,1047563295,CH
+1047563296,1047563303,DE
+1047563304,1047563311,CH
+1047563312,1047563319,DE
+1047563320,1047563323,CH
+1047563324,1047563351,DE
+1047563352,1047563355,CH
+1047563356,1047563363,DE
+1047563364,1047563367,ES
+1047563368,1047563407,DE
+1047563408,1047563411,CH
+1047563412,1047563415,DE
+1047563416,1047563419,BE
+1047563420,1047563431,DE
 1047563432,1047563435,CH
-1047563436,1047565279,DE
+1047563436,1047563455,DE
+1047563456,1047563463,ES
+1047563464,1047563467,DE
+1047563468,1047563471,CH
+1047563472,1047563555,DE
+1047563556,1047563559,CH
+1047563560,1047564551,DE
+1047564552,1047564559,CH
+1047564560,1047565107,DE
+1047565108,1047565111,IT
+1047565112,1047565131,DE
+1047565132,1047565135,GB
+1047565136,1047565279,DE
 1047565280,1047565311,CH
 1047565312,1047565343,DE
 1047565344,1047565359,CH
-1047565360,1047565839,DE
+1047565360,1047565503,DE
+1047565504,1047565507,CZ
+1047565508,1047565839,DE
 1047565840,1047565887,CH
-1047565888,1047566435,DE
+1047565888,1047566015,DE
+1047566016,1047566079,CZ
+1047566080,1047566403,DE
+1047566404,1047566415,CH
+1047566416,1047566435,DE
 1047566436,1047566439,CH
 1047566440,1047566451,DE
 1047566452,1047566459,CH
-1047566460,1047566519,DE
-1047566520,1047566527,CH
-1047566528,1047566531,DE
-1047566532,1047566535,CH
-1047566536,1047566543,DE
+1047566460,1047566475,DE
+1047566476,1047566479,CH
+1047566480,1047566495,DE
+1047566496,1047566499,CH
+1047566500,1047566519,DE
+1047566520,1047566539,CH
+1047566540,1047566543,DE
 1047566544,1047566547,CH
-1047566548,1047566967,DE
+1047566548,1047566559,DE
+1047566560,1047566563,CH
+1047566564,1047566871,DE
+1047566872,1047566879,CH
+1047566880,1047566891,DE
+1047566892,1047566903,CH
+1047566904,1047566943,DE
+1047566944,1047566947,ES
+1047566948,1047566951,AT
+1047566952,1047566963,DE
+1047566964,1047566967,AT
 1047566968,1047566971,CH
 1047566972,1047567015,DE
 1047567016,1047567019,CH
 1047567020,1047567027,DE
 1047567028,1047567031,CH
-1047567032,1047567143,DE
+1047567032,1047567039,DE
+1047567040,1047567055,US
+1047567056,1047567063,DE
+1047567064,1047567067,CH
+1047567068,1047567071,DE
+1047567072,1047567075,NL
+1047567076,1047567079,DE
+1047567080,1047567083,NL
+1047567084,1047567135,DE
+1047567136,1047567143,GB
 1047567144,1047567147,CH
-1047567148,1047567151,DE
+1047567148,1047567151,BE
 1047567152,1047567159,CH
-1047567160,1047567359,DE
+1047567160,1047567163,DE
+1047567164,1047567167,AT
+1047567168,1047567175,CH
+1047567176,1047567211,DE
+1047567212,1047567227,CH
+1047567228,1047567239,DE
+1047567240,1047567243,CH
+1047567244,1047567247,DE
+1047567248,1047567255,CH
+1047567256,1047567283,DE
+1047567284,1047567287,CH
+1047567288,1047567307,DE
+1047567308,1047567311,CH
+1047567312,1047567319,DE
+1047567320,1047567327,CH
+1047567328,1047567343,DE
+1047567344,1047567351,AT
+1047567352,1047567359,DE
 1047567360,1047567375,CH
-1047567376,1047567467,DE
-1047567468,1047567471,CH
+1047567376,1047567447,DE
+1047567448,1047567451,CH
+1047567452,1047567463,DE
+1047567464,1047567471,CH
 1047567472,1047567475,DE
 1047567476,1047567483,CH
-1047567484,1047567823,DE
+1047567484,1047567495,DE
+1047567496,1047567499,CH
+1047567500,1047567535,DE
+1047567536,1047567539,CH
+1047567540,1047567551,DE
+1047567552,1047567555,CH
+1047567556,1047567583,DE
+1047567584,1047567615,CZ
+1047567616,1047567655,DE
+1047567656,1047567659,CH
+1047567660,1047567727,DE
+1047567728,1047567731,BE
+1047567732,1047567735,DE
+1047567736,1047567743,CH
+1047567744,1047567751,DE
+1047567752,1047567755,LU
+1047567756,1047567759,CH
+1047567760,1047567775,DE
+1047567776,1047567807,CH
+1047567808,1047567823,DE
 1047567824,1047567839,CH
-1047567840,1047567903,DE
-1047567904,1047567935,CH
-1047567936,1047568383,DE
+1047567840,1047567847,DE
+1047567848,1047567851,CH
+1047567852,1047567855,BE
+1047567856,1047567871,DE
+1047567872,1047567875,CH
+1047567876,1047567879,AT
+1047567880,1047567883,CH
+1047567884,1047567903,DE
+1047567904,1047567939,CH
+1047567940,1047567983,DE
+1047567984,1047567999,ES
+1047568000,1047568047,DE
+1047568048,1047568051,CH
+1047568052,1047568055,DE
+1047568056,1047568059,CH
+1047568060,1047568187,DE
+1047568188,1047568191,CH
+1047568192,1047568215,DE
+1047568216,1047568219,CH
+1047568220,1047568259,DE
+1047568260,1047568263,AT
+1047568264,1047568383,DE
 1047568384,1047576575,NL
 1047576576,1047584767,HU
 1047584768,1047592959,NL
@@ -22400,6 +22524,7 @@
 1051984664,1051984671,DE
 1051984752,1051984767,DE
 1051990016,1051992063,DE
+1051994880,1051995135,DE
 1052001280,1052002303,DE
 1052011264,1052012287,DE
 1052016640,1052017535,GB
@@ -22418,7 +22543,7 @@
 1052098560,1052116991,SE
 1052116992,1052119039,RU
 1052119040,1052121087,GB
-1052121088,1052125183,RU
+1052121088,1052123135,RU
 1052125184,1052126207,DE
 1052126208,1052127231,FR
 1052127232,1052129279,RU
@@ -22426,7 +22551,8 @@
 1052131328,1052133375,UA
 1052133376,1052135423,RU
 1052135424,1052137471,UA
-1052137472,1052140543,RU
+1052137472,1052139519,RU
+1052139520,1052140543,IN
 1052141056,1052141567,DE
 1052141568,1052143615,PL
 1052143616,1052145663,BG
@@ -23180,7 +23306,6 @@
 1052778496,1052786687,RU
 1052786688,1052794879,GR
 1052794880,1052803071,NL
-1052811264,1052819455,RU
 1052819456,1052827647,DE
 1052827648,1052835839,RU
 1052835840,1052844031,IR
@@ -23208,6 +23333,7 @@
 1053310144,1053310207,SK
 1053312872,1053312887,DK
 1053312912,1053312927,DK
+1053313496,1053313503,GB
 1053318912,1053318943,FI
 1053319168,1053323263,GB
 1053325824,1053326335,DE
@@ -23223,6 +23349,7 @@
 1053350408,1053350415,BE
 1053350492,1053350503,BE
 1053350508,1053350515,BE
+1053353336,1053353343,GB
 1053353408,1053353423,GB
 1053360128,1053364223,ES
 1053364224,1053368319,CZ
@@ -23274,8 +23401,9 @@
 1053839360,1053840383,DE
 1053840400,1053840415,DE
 1053840448,1053840511,DE
-1053843200,1053843231,DK
-1053843232,1053843455,GB
+1053843200,1053843207,GB
+1053843208,1053843223,DK
+1053843224,1053843455,GB
 1053843712,1053843967,DE
 1053843968,1053844223,GB
 1053844224,1053844479,DE
@@ -23305,8 +23433,6 @@
 1053868008,1053868015,DE
 1053868032,1053868383,ES
 1053868400,1053868407,ES
-1053868416,1053868447,ES
-1053868448,1053868455,GB
 1053868456,1053868479,ES
 1053868480,1053868543,FR
 1053868800,1053869567,DE
@@ -23402,25 +23528,15 @@
 1054654464,1054662655,MK
 1054662656,1054670847,FI
 1054670848,1054671103,GB
-1054671168,1054671231,IE
 1054671372,1054671375,IE
 1054671416,1054671423,IE
 1054671432,1054671439,IE
-1054672160,1054672175,IE
-1054672256,1054672271,IE
 1054672320,1054672335,US
-1054672336,1054672367,IE
+1054672352,1054672367,IE
 1054672384,1054672447,IE
-1054672720,1054672727,IE
-1054672744,1054672767,IE
 1054672776,1054672783,IE
-1054672792,1054672807,IE
-1054673664,1054673727,IE
-1054673856,1054673919,IE
-1054673952,1054674047,IE
-1054674080,1054674111,IE
+1054672792,1054672799,IE
 1054674456,1054674471,IE
-1054674480,1054674495,IE
 1054674504,1054674511,IE
 1054674520,1054674527,GB
 1054674688,1054675199,IE
@@ -23503,7 +23619,9 @@
 1056875008,1056964607,GB
 1056964608,1059061759,US
 1059061760,1059323903,IE
-1059323904,1061558271,US
+1059323904,1061227263,US
+1061227264,1061227519,BO
+1061227520,1061558271,US
 1061558272,1061559295,PK
 1061559296,1061588735,US
 1061588736,1061588991,GU
@@ -23545,11 +23663,31 @@
 1063057536,1063059455,CA
 1063059456,1063290879,US
 1063290880,1063291903,CA
-1063291904,1063813119,US
+1063291904,1063568895,US
+1063568896,1063569151,TZ
+1063569152,1063748607,US
+1063748608,1063749119,GH
+1063749120,1063749631,US
+1063749632,1063749887,LR
+1063749888,1063750143,SA
+1063750144,1063750399,NG
+1063750400,1063750655,US
+1063750656,1063751679,NG
+1063751680,1063813119,US
 1063813120,1063821311,CA
 1063821312,1063895039,US
 1063895040,1063899135,KR
-1063899136,1064204287,US
+1063899136,1064124927,US
+1064124928,1064125695,EC
+1064125696,1064125951,US
+1064125952,1064126207,PE
+1064126208,1064126719,US
+1064126720,1064126975,EC
+1064126976,1064127487,US
+1064127488,1064127999,EC
+1064128000,1064171263,US
+1064171264,1064171519,NG
+1064171520,1064204287,US
 1064204288,1064205311,MX
 1064205312,1064445183,US
 1064445184,1064445439,PK
@@ -23557,9 +23695,33 @@
 1065371648,1065372959,PR
 1065372960,1065372991,US
 1065372992,1065373695,PR
-1065373696,1065511109,US
+1065373696,1065493759,US
+1065493760,1065494015,GB
+1065494016,1065505583,US
+1065505584,1065505615,GB
+1065505616,1065506047,US
+1065506048,1065506559,GB
+1065506560,1065511109,US
 1065511110,1065511110,GB
-1065511111,1065547775,US
+1065511111,1065519247,US
+1065519248,1065519263,IN
+1065519264,1065519303,US
+1065519304,1065519311,IN
+1065519312,1065519871,US
+1065519872,1065520127,GB
+1065520128,1065521407,US
+1065521408,1065525247,GB
+1065525248,1065525791,US
+1065525792,1065525807,IN
+1065525808,1065526015,US
+1065526016,1065526271,GB
+1065526272,1065529343,US
+1065529344,1065530879,GB
+1065530880,1065531391,US
+1065531392,1065537535,GB
+1065537536,1065539583,US
+1065539584,1065539839,GB
+1065539840,1065547775,US
 1065547776,1065548031,GB
 1065548032,1065611263,US
 1065611264,1065615359,PR
@@ -23584,7 +23746,9 @@
 1066311955,1066311955,US
 1066311956,1066315775,CA
 1066315776,1066352639,US
-1066352640,1066358271,JM
+1066352640,1066355711,JM
+1066355712,1066355967,BB
+1066355968,1066358271,JM
 1066358272,1066358527,AG
 1066358528,1066369023,JM
 1066369024,1066830303,US
@@ -23599,9 +23763,7 @@
 1066831336,1066831343,JP
 1066831344,1067294719,US
 1067294720,1067294975,CA
-1067294976,1067385028,US
-1067385029,1067385029,JP
-1067385030,1067450879,US
+1067294976,1067450879,US
 1067450880,1067450880,AL
 1067450881,1067471689,US
 1067471690,1067471690,SV
@@ -23700,7 +23862,9 @@
 1068491264,1068491519,HN
 1068491520,1070646015,US
 1070646016,1070646271,IN
-1070646272,1071106559,US
+1070646272,1070729471,US
+1070729472,1070729727,CA
+1070729728,1071106559,US
 1071106560,1071106815,NL
 1071106816,1071141557,US
 1071141558,1071141558,HK
@@ -23708,11 +23872,13 @@
 1071141848,1071141851,HK
 1071141852,1071141873,US
 1071141874,1071141874,HK
-1071141875,1071149200,US
-1071149201,1071149201,LB
-1071149202,1071156467,US
+1071141875,1071144959,US
+1071144960,1071153151,LB
+1071153152,1071156467,US
 1071156468,1071156471,KR
-1071156472,1071190219,US
+1071156472,1071170815,US
+1071170816,1071171071,PH
+1071171072,1071190219,US
 1071190220,1071190220,HK
 1071190221,1071201551,US
 1071201552,1071201567,TH
@@ -23728,16 +23894,22 @@
 1071284224,1071292415,AU
 1071292416,1071300607,US
 1071300608,1071301631,FR
-1071301632,1071382975,US
+1071301632,1071318783,US
+1071318784,1071319039,IN
+1071319040,1071382975,US
 1071382976,1071383039,HK
-1071383040,1071514981,US
+1071383040,1071477247,US
+1071477248,1071480831,CA
+1071480832,1071514981,US
 1071514982,1071514982,HK
 1071514983,1071515063,US
 1071515064,1071515067,GB
 1071515068,1071515071,ES
 1071515072,1071522817,US
 1071522818,1071522818,MW
-1071522819,1071726951,US
+1071522819,1071527567,US
+1071527568,1071527583,TW
+1071527584,1071726951,US
 1071726952,1071726955,IE
 1071726956,1071727023,US
 1071727024,1071727027,GB
@@ -23768,48 +23940,102 @@
 1072361472,1072361727,GB
 1072361728,1072707327,US
 1072707328,1072707583,IN
-1072707584,1072931839,US
+1072707584,1072923135,US
+1072923136,1072923391,CA
+1072923392,1072924159,US
+1072924160,1072924671,HT
+1072924672,1072925183,US
+1072925184,1072925695,GB
+1072925696,1072926207,CA
+1072926208,1072926719,US
+1072926720,1072926975,PH
+1072926976,1072927487,CA
+1072927488,1072928511,US
+1072928512,1072928767,CA
+1072928768,1072929023,US
+1072929024,1072929535,CA
+1072929536,1072930303,US
+1072930304,1072930559,CA
+1072930560,1072930815,US
+1072930816,1072931071,CA
+1072931072,1072931327,US
+1072931328,1072931583,CA
+1072931584,1072931839,SY
 1072931840,1072932095,CA
-1072932096,1072936447,US
+1072932096,1072932351,US
+1072932352,1072932607,CA
+1072932608,1072932863,NG
+1072932864,1072933887,US
+1072933888,1072934399,CA
+1072934400,1072934775,US
+1072934776,1072934783,FR
+1072934784,1072935423,US
+1072935424,1072935679,CA
+1072935680,1072936191,US
+1072936192,1072936447,CA
 1072936448,1072936703,PH
-1072936704,1072943103,US
+1072936704,1072937215,US
+1072937216,1072937471,IR
+1072937472,1072937727,US
+1072937728,1072938239,CA
+1072938240,1072938495,VG
+1072938496,1072939007,US
+1072939008,1072939263,CA
+1072939264,1072941055,US
+1072941056,1072942079,CA
+1072942080,1072943103,US
 1072943104,1072945151,CA
 1072945152,1072953599,US
 1072953600,1072953607,IE
-1072953608,1073026559,US
+1072953608,1073022975,US
+1073022976,1073025791,HN
+1073025792,1073026047,NI
+1073026048,1073026303,US
+1073026304,1073026559,DO
 1073026560,1073027071,PR
-1073027072,1073028607,US
+1073027072,1073028351,NI
+1073028352,1073028607,US
 1073028608,1073029119,GD
 1073029120,1073035263,US
 1073035264,1073036287,GD
 1073036288,1073036543,US
 1073036544,1073037055,MX
-1073037056,1073037823,US
+1073037056,1073037311,CW
+1073037312,1073037823,CO
 1073037824,1073038335,GD
-1073038336,1073041407,US
-1073041408,1073041663,CO
-1073041664,1073042431,US
-1073042432,1073042943,CO
-1073042944,1073044479,US
+1073038336,1073039359,US
+1073039360,1073041407,GT
+1073041408,1073043455,CO
+1073043456,1073043967,PR
+1073043968,1073044479,US
 1073044480,1073044735,BB
-1073044736,1073044991,US
-1073044992,1073045503,PR
-1073045504,1073048836,US
+1073044736,1073045503,PR
+1073045504,1073047551,CO
+1073047552,1073048836,US
 1073048837,1073048837,CW
 1073048838,1073049064,US
 1073049065,1073049065,CW
 1073049066,1073049087,US
 1073049088,1073049599,PR
-1073049600,1073051647,US
-1073051648,1073051903,BS
-1073051904,1073075199,US
+1073049600,1073052671,BS
+1073052672,1073075199,US
 1073075200,1073075455,CA
 1073075456,1073116159,US
 1073116160,1073117183,GB
 1073117184,1073118207,US
 1073118208,1073118719,NL
 1073118720,1073119231,DE
-1073119232,1073373183,US
+1073119232,1073120079,US
+1073120080,1073120089,RO
+1073120090,1073120109,US
+1073120110,1073120119,SA
+1073120120,1073123613,US
+1073123614,1073123623,TR
+1073123624,1073123653,US
+1073123654,1073123663,ES
+1073123664,1073123753,US
+1073123754,1073123763,RU
+1073123764,1073373183,US
 1073373184,1073381375,CA
 1073381376,1073446399,US
 1073446400,1073446911,SG
@@ -24053,7 +24279,9 @@
 1076000256,1076000767,US
 1076000768,1076002047,CA
 1076002048,1076002815,US
-1076002816,1076018098,CA
+1076002816,1076012543,CA
+1076012544,1076012799,US
+1076012800,1076018098,CA
 1076018099,1076018099,US
 1076018100,1076018431,CA
 1076018432,1076018687,US
@@ -24626,15 +24854,13 @@
 1083621376,1083637759,BS
 1083637760,1083686911,US
 1083686912,1083703295,CA
-1083703296,1083738111,US
-1083738112,1083740159,PR
-1083740160,1084067583,US
+1083703296,1083738367,US
+1083738368,1083738879,PR
+1083738880,1084067583,US
 1084067584,1084067839,CA
 1084067840,1084153599,US
 1084153600,1084153855,NL
-1084153856,1085024287,US
-1085024288,1085024319,DE
-1085024320,1085439999,US
+1084153856,1085439999,US
 1085440000,1085448191,CA
 1085448192,1085456383,US
 1085456384,1085464575,PR
@@ -24997,9 +25223,7 @@
 1091808000,1091808255,CA
 1091808256,1091809535,US
 1091809536,1091809791,CA
-1091809792,1091812607,US
-1091812608,1091812855,JP
-1091812856,1091960831,US
+1091809792,1091960831,US
 1091960832,1092026367,CA
 1092026368,1092075519,US
 1092075520,1092091903,PR
@@ -25139,7 +25363,135 @@
 1097076124,1097076127,DE
 1097076128,1097727999,US
 1097728000,1097736191,CA
-1097736192,1097742641,US
+1097736192,1097736457,US
+1097736458,1097736467,CZ
+1097736468,1097736477,FR
+1097736478,1097736547,US
+1097736548,1097736557,NL
+1097736558,1097736567,US
+1097736568,1097736577,SG
+1097736578,1097736587,ES
+1097736588,1097736607,US
+1097736608,1097736617,BR
+1097736618,1097736637,US
+1097736638,1097736647,UM
+1097736648,1097736733,US
+1097736734,1097736743,BG
+1097736744,1097736753,US
+1097736754,1097736763,BG
+1097736764,1097736773,US
+1097736774,1097736783,NL
+1097736784,1097736803,US
+1097736804,1097736813,BE
+1097736814,1097736823,TR
+1097736824,1097736893,US
+1097736894,1097736903,VE
+1097736904,1097736913,FI
+1097736914,1097736999,US
+1097737000,1097737009,RU
+1097737010,1097737029,US
+1097737030,1097737039,RU
+1097737040,1097737059,US
+1097737060,1097737069,TR
+1097737070,1097737109,US
+1097737110,1097737119,LB
+1097737120,1097737159,US
+1097737160,1097737169,BR
+1097737170,1097737591,US
+1097737592,1097737601,BR
+1097737602,1097737611,UA
+1097737612,1097737631,US
+1097737632,1097737641,IT
+1097737642,1097737747,US
+1097737748,1097737757,GB
+1097737758,1097737847,US
+1097737848,1097737857,MX
+1097737858,1097737897,US
+1097737898,1097737907,SG
+1097737908,1097737927,US
+1097737928,1097737937,RU
+1097737938,1097738053,US
+1097738054,1097738063,LV
+1097738064,1097738093,US
+1097738094,1097738103,RS
+1097738104,1097738133,US
+1097738134,1097738143,RU
+1097738144,1097738163,US
+1097738164,1097738173,UA
+1097738174,1097738183,VN
+1097738184,1097738249,US
+1097738250,1097738259,TR
+1097738260,1097738359,US
+1097738360,1097738369,TW
+1097738370,1097738771,US
+1097738772,1097738781,MY
+1097738782,1097738861,US
+1097738862,1097738871,SA
+1097738872,1097738881,SG
+1097738882,1097738931,US
+1097738932,1097738941,ID
+1097738942,1097739037,US
+1097739038,1097739047,BY
+1097739048,1097739057,SG
+1097739058,1097739087,US
+1097739088,1097739097,TR
+1097739098,1097739107,KW
+1097739108,1097739343,US
+1097739344,1097739353,GB
+1097739354,1097739383,US
+1097739384,1097739393,BR
+1097739394,1097739403,US
+1097739404,1097739413,BR
+1097739414,1097739423,US
+1097739424,1097739433,SA
+1097739434,1097739463,US
+1097739464,1097739473,LV
+1097739474,1097739569,US
+1097739570,1097739579,GB
+1097739580,1097739589,US
+1097739590,1097739599,IL
+1097739600,1097739669,US
+1097739670,1097739679,BY
+1097739680,1097739689,TR
+1097739690,1097739699,DK
+1097739700,1097739729,US
+1097739730,1097739739,GB
+1097739740,1097740387,US
+1097740388,1097740397,SA
+1097740398,1097740839,US
+1097740840,1097740849,BY
+1097740850,1097740859,RU
+1097740860,1097740899,US
+1097740900,1097740909,RU
+1097740910,1097741065,US
+1097741066,1097741075,IN
+1097741076,1097741215,US
+1097741216,1097741225,UA
+1097741226,1097741235,IT
+1097741236,1097741245,US
+1097741246,1097741255,FR
+1097741256,1097741351,US
+1097741352,1097741361,RU
+1097741362,1097741577,US
+1097741578,1097741587,KW
+1097741588,1097741607,US
+1097741608,1097741617,LB
+1097741618,1097741667,US
+1097741668,1097741677,GR
+1097741678,1097741843,US
+1097741844,1097741853,BY
+1097741854,1097741863,US
+1097741864,1097741873,HR
+1097741874,1097741883,GB
+1097741884,1097741913,US
+1097741914,1097741923,MK
+1097741924,1097742023,US
+1097742024,1097742033,GB
+1097742034,1097742209,US
+1097742210,1097742219,GB
+1097742220,1097742269,US
+1097742270,1097742279,RU
+1097742280,1097742641,US
 1097742642,1097742651,BR
 1097742652,1097742681,US
 1097742682,1097742691,CN
@@ -25316,9 +25668,7 @@
 1104492288,1104492543,PH
 1104492544,1104610303,US
 1104610304,1104611327,KR
-1104611328,1104842751,US
-1104842752,1104844799,PR
-1104844800,1105719295,US
+1104611328,1105719295,US
 1105719296,1105723391,IN
 1105723392,1106469887,US
 1106469888,1106470911,BS
@@ -25417,7 +25767,11 @@
 1109970432,1109970687,CA
 1109970688,1109979135,US
 1109979136,1109983231,CA
-1109983232,1110126591,US
+1109983232,1110056959,US
+1110056960,1110060639,JP
+1110060640,1110061055,US
+1110061056,1110065151,SG
+1110065152,1110126591,US
 1110126592,1110130687,CA
 1110130688,1110260431,US
 1110260432,1110260447,CO
@@ -25461,7 +25815,12 @@
 1110473984,1110474239,CA
 1110474240,1110540287,US
 1110540288,1110573055,CA
-1110573056,1110587903,PR
+1110573056,1110579711,US
+1110579712,1110579967,PR
+1110579968,1110580223,US
+1110580224,1110580863,PR
+1110580864,1110580991,US
+1110580992,1110587903,PR
 1110587904,1110593407,US
 1110593408,1110595583,PR
 1110595584,1110595776,US
@@ -25516,7 +25875,8 @@
 1112412672,1112413183,NL
 1112413184,1112413695,CH
 1112413696,1112414207,CA
-1112414208,1112416255,US
+1112414208,1112415231,US
+1112415232,1112416255,SA
 1112416256,1112418303,CN
 1112418304,1112418815,US
 1112418816,1112419071,IT
@@ -25634,7 +25994,8 @@
 1113645056,1113653247,ID
 1113653248,1113657343,US
 1113657344,1113661439,CA
-1113661440,1113669631,US
+1113661440,1113665535,AR
+1113665536,1113669631,US
 1113669632,1113677823,CA
 1113677824,1113681919,US
 1113686016,1113695231,US
@@ -25725,7 +26086,68 @@
 1114533376,1114533887,ZA
 1114533888,1114537983,AO
 1114537984,1114550271,CA
-1114550272,1114588671,US
+1114550272,1114580017,US
+1114580018,1114580027,KW
+1114580028,1114580037,EE
+1114580038,1114580499,US
+1114580500,1114580509,GB
+1114580510,1114580649,US
+1114580650,1114580659,NL
+1114580660,1114581051,US
+1114581052,1114581061,BR
+1114581062,1114581101,US
+1114581102,1114581111,SI
+1114581112,1114581513,US
+1114581514,1114581523,RU
+1114581524,1114581533,GR
+1114581534,1114581543,RU
+1114581544,1114581553,DE
+1114581554,1114581573,US
+1114581574,1114581583,UA
+1114581584,1114581603,US
+1114581604,1114581613,GR
+1114581614,1114581623,US
+1114581624,1114581633,SG
+1114581634,1114582065,US
+1114582066,1114582075,TR
+1114582076,1114582085,US
+1114582086,1114582095,DE
+1114582096,1114582105,US
+1114582106,1114582115,SG
+1114582116,1114582135,US
+1114582136,1114582145,RU
+1114582146,1114582225,US
+1114582226,1114582245,SG
+1114582246,1114583099,US
+1114583100,1114583109,FR
+1114583110,1114583119,EG
+1114583120,1114583681,US
+1114583682,1114583691,AL
+1114583692,1114583781,US
+1114583782,1114583791,DE
+1114583792,1114583867,US
+1114583868,1114583877,VE
+1114583878,1114584123,US
+1114584124,1114584133,RU
+1114584134,1114584153,US
+1114584154,1114584163,GR
+1114584164,1114584605,US
+1114584606,1114584615,BR
+1114584616,1114584841,US
+1114584842,1114584851,ES
+1114584852,1114584871,US
+1114584872,1114584881,NL
+1114584882,1114584901,US
+1114584902,1114584911,DE
+1114584912,1114584981,US
+1114584982,1114584991,BR
+1114584992,1114585629,US
+1114585630,1114585639,BR
+1114585640,1114585649,LV
+1114585650,1114585659,ES
+1114585660,1114586943,US
+1114586944,1114586951,IL
+1114586952,1114588671,US
 1114588672,1114589695,CA
 1114589696,1114590975,US
 1114590976,1114595327,CA
@@ -25735,7 +26157,17 @@
 1114730496,1114734591,CA
 1114734592,1114782271,US
 1114782272,1114782330,HK
-1114782331,1115112575,US
+1114782331,1115029503,US
+1115045888,1115064447,US
+1115064448,1115064463,AU
+1115064464,1115064975,US
+1115064976,1115064991,TW
+1115064992,1115070063,US
+1115070064,1115070079,SI
+1115070080,1115070337,US
+1115070338,1115070347,SG
+1115070348,1115086847,US
+1115095040,1115112575,US
 1115112576,1115112607,IN
 1115112608,1115113471,US
 1115113472,1115114495,HN
@@ -25778,22 +26210,27 @@
 1115705344,1115709439,CA
 1115709440,1115783167,US
 1115783168,1115791359,CA
-1115791360,1115795455,PR
+1115791360,1115791871,PR
+1115791872,1115792383,US
+1115792384,1115794431,PR
+1115794432,1115794943,US
+1115794944,1115795199,PR
+1115795200,1115795455,US
 1115795456,1115799551,CA
 1115799552,1115815935,US
 1115815936,1115947007,CA
 1115947008,1115979775,US
 1115979776,1116012543,CA
 1116012544,1116014079,US
-1116014080,1116014335,DE
+1116014080,1116014335,CH
 1116014336,1116014591,US
-1116014592,1116014847,DE
+1116014592,1116014847,CH
 1116014848,1116015871,US
-1116015872,1116016127,DE
+1116015872,1116016127,CH
 1116016128,1116024063,US
 1116024064,1116024319,PG
 1116024320,1116027135,US
-1116027136,1116027903,DE
+1116027136,1116027903,CH
 1116027904,1116031743,US
 1116031744,1116031999,GB
 1116032000,1116032255,JP
@@ -26134,9 +26571,7 @@
 1121247232,1121255423,CA
 1121255424,1121479003,US
 1121479004,1121479007,IN
-1121479008,1121717115,US
-1121717116,1121717116,JP
-1121717117,1121763327,US
+1121479008,1121763327,US
 1121763328,1121767423,CA
 1121767424,1121878015,US
 1121878016,1121910783,CA
@@ -26165,9 +26600,7 @@
 1122451456,1122455551,CO
 1122455552,1122476031,US
 1122476032,1122480127,PR
-1122480128,1122493439,US
-1122493440,1122493951,PR
-1122493952,1122494463,US
+1122480128,1122494463,US
 1122494464,1122495999,PR
 1122496000,1122498559,US
 1122498560,1122499071,PR
@@ -26199,7 +26632,9 @@
 1123589888,1123590143,US
 1123590144,1123598335,VI
 1123598336,1123598591,CA
-1123598592,1123635626,US
+1123598592,1123635624,US
+1123635625,1123635625,JP
+1123635626,1123635626,US
 1123635627,1123635627,PL
 1123635628,1123635639,US
 1123635640,1123635640,RU
@@ -26253,9 +26688,7 @@
 1123848192,1123852287,CA
 1123852288,1123950591,US
 1123950592,1123958783,CA
-1123958784,1124853798,US
-1124853799,1124853799,JP
-1124853800,1125064703,US
+1123958784,1125064703,US
 1125064704,1125065215,GB
 1125065216,1125081855,US
 1125081856,1125082111,DE
@@ -26381,10 +26814,7 @@
 1137539192,1137541119,CA
 1137541120,1137623039,US
 1137623040,1137639423,PR
-1137639424,1137656831,US
-1137656832,1137657855,GB
-1137657856,1137659903,DE
-1137659904,1137681583,US
+1137639424,1137681583,US
 1137681584,1137681599,AR
 1137681600,1137688063,US
 1137688064,1137688319,FR
@@ -26395,7 +26825,9 @@
 1137692672,1137704959,US
 1137704960,1137713151,CA
 1137713152,1137717247,US
-1137721344,1137836031,US
+1137721344,1137803263,US
+1137803264,1137811455,KZ
+1137811456,1137836031,US
 1137840128,1137840383,CA
 1137840384,1137840895,US
 1137840896,1137841151,DE
@@ -26558,8 +26990,7 @@
 1138978048,1138978303,IT
 1138978304,1138978815,HK
 1138978816,1138980863,DE
-1138980864,1138982911,CN
-1138982912,1139146751,US
+1138980864,1139146751,US
 1139146752,1139154943,GT
 1139154944,1139167231,JM
 1139167232,1139167743,US
@@ -26615,8 +27046,8 @@
 1145430016,1145475071,US
 1145475072,1145479167,CA
 1145479168,1145487359,US
-1145487360,1145489151,DE
-1145489152,1145489919,US
+1145487360,1145489663,DE
+1145489664,1145489919,US
 1145489920,1145490943,DE
 1145490944,1145491199,CH
 1145491200,1145491455,DE
@@ -26658,7 +27089,13 @@
 1157660672,1157664767,CA
 1157664768,1157666815,US
 1157666816,1157693439,CA
-1157693440,1157910527,US
+1157693440,1157753087,US
+1157753088,1157753343,GB
+1157753344,1157755247,US
+1157755248,1157755263,GR
+1157755264,1157758207,US
+1157758208,1157758463,RU
+1157758464,1157910527,US
 1157910528,1157910543,CA
 1157910544,1157910551,US
 1157910552,1157910575,CA
@@ -26673,13 +27110,7 @@
 1157910864,1157910879,US
 1157910880,1157911071,CA
 1157911072,1157911103,US
-1157911104,1157911279,CA
-1157911280,1157911287,US
-1157911288,1157911343,CA
-1157911344,1157911351,US
-1157911352,1157911743,CA
-1157911744,1157911759,US
-1157911760,1157911775,CA
+1157911104,1157911775,CA
 1157911776,1157911791,US
 1157911792,1157911927,CA
 1157911928,1157911935,US
@@ -26687,9 +27118,7 @@
 1157911952,1157911983,US
 1157911984,1157912015,CA
 1157912016,1157912031,US
-1157912032,1157912183,CA
-1157912184,1157912191,US
-1157912192,1157912347,CA
+1157912032,1157912347,CA
 1157912348,1157912348,US
 1157912349,1157912391,CA
 1157912392,1157912399,US
@@ -26697,61 +27126,39 @@
 1157912448,1157912463,US
 1157912464,1157912647,CA
 1157912648,1157912671,US
-1157912672,1157912687,CA
-1157912688,1157912735,US
+1157912672,1157912703,CA
+1157912704,1157912735,US
 1157912736,1157912743,CA
 1157912744,1157912751,US
 1157912752,1157912815,CA
 1157912816,1157912823,US
-1157912824,1157912831,CA
-1157912832,1157912839,US
-1157912840,1157912895,CA
+1157912824,1157912895,CA
 1157912896,1157912911,US
-1157912912,1157912943,CA
-1157912944,1157913023,US
-1157913024,1157913039,CA
-1157913040,1157913047,FI
-1157913048,1157913087,CA
+1157912912,1157912959,CA
+1157912960,1157913023,US
+1157913024,1157913087,CA
 1157913088,1157913119,US
-1157913120,1157913207,CA
-1157913208,1157913215,US
-1157913216,1157913231,CA
-1157913232,1157913247,US
-1157913248,1157913279,CA
+1157913120,1157913279,CA
 1157913280,1157913295,US
-1157913296,1157913439,CA
-1157913440,1157913455,US
-1157913456,1157913471,CA
+1157913296,1157913471,CA
 1157913472,1157913487,US
 1157913488,1157913495,CA
 1157913496,1157913503,US
 1157913504,1157913583,CA
 1157913584,1157913599,US
-1157913600,1157913631,CA
-1157913632,1157913647,US
-1157913648,1157913663,CA
+1157913600,1157913663,CA
 1157913664,1157913679,US
-1157913680,1157913695,CA
-1157913696,1157913711,US
-1157913712,1157913759,CA
-1157913760,1157913775,US
-1157913776,1157913919,CA
-1157913920,1157913943,US
-1157913944,1157914031,CA
+1157913680,1157913767,CA
+1157913768,1157913775,US
+1157913776,1157914031,CA
 1157914032,1157914047,US
-1157914048,1157914079,CA
-1157914080,1157914095,US
-1157914096,1157914143,CA
+1157914048,1157914143,CA
 1157914144,1157914175,US
-1157914176,1157914183,CA
-1157914184,1157914191,US
-1157914192,1157914207,CA
+1157914176,1157914207,CA
 1157914208,1157914223,US
 1157914224,1157914239,CA
 1157914240,1157914255,US
-1157914256,1157914303,CA
-1157914304,1157914335,US
-1157914336,1157914351,CA
+1157914256,1157914351,CA
 1157914352,1157914367,US
 1157914368,1157914623,CA
 1157914624,1157931007,US
@@ -26772,23 +27179,27 @@
 1158183468,1158183468,GB
 1158183469,1158234111,US
 1158234112,1158250495,CA
-1158250496,1158316031,US
-1158316032,1158324223,CA
+1158250496,1158295807,US
+1158295808,1158296063,GB
+1158296064,1158316031,US
+1158316032,1158322242,CA
+1158322243,1158322243,US
+1158322244,1158324223,CA
 1158324224,1158340607,US
 1158340608,1158344703,CA
 1158344704,1158348799,US
 1158348800,1158381567,CA
 1158381568,1158422527,US
 1158422528,1158423551,CA
-1158423552,1158427647,US
-1158427648,1158428159,CA
-1158428160,1158440959,US
+1158423552,1158440959,US
 1158440960,1158441215,CA
 1158441216,1158441471,US
 1158441472,1158441983,CA
 1158441984,1158443007,DM
 1158443008,1158774783,US
-1158774784,1158791167,CA
+1158774784,1158784703,CA
+1158784704,1158784767,US
+1158784768,1158791167,CA
 1158791168,1158799359,BM
 1158799360,1158807551,CA
 1158807552,1158951575,US
@@ -26801,13 +27212,19 @@
 1158995968,1159004159,CA
 1159004160,1159213055,US
 1159213056,1159217151,CA
-1159217152,1159249919,US
-1159249920,1159254015,PR
-1159254016,1159262475,US
+1159217152,1159251199,US
+1159251200,1159251967,PR
+1159251968,1159252223,US
+1159252224,1159252479,PR
+1159252480,1159262475,US
 1159262476,1159262479,SA
 1159262480,1159262487,US
 1159262488,1159262491,SA
-1159262492,1159281919,US
+1159262492,1159269119,US
+1159269120,1159269375,AR
+1159269376,1159274495,US
+1159274496,1159274751,GB
+1159274752,1159281919,US
 1159281920,1159282175,GB
 1159282176,1159300607,US
 1159300608,1159300863,SE
@@ -26834,8 +27251,18 @@
 1159516416,1159516671,US
 1159516672,1159518767,CA
 1159518768,1159518775,US
-1159518776,1159528447,CA
-1159528448,1159668479,US
+1159518776,1159518975,CA
+1159518976,1159519231,US
+1159519232,1159520383,CA
+1159520384,1159520511,US
+1159520512,1159523327,CA
+1159523328,1159523583,US
+1159523584,1159525119,CA
+1159525120,1159525375,US
+1159525376,1159526399,CA
+1159526400,1159526655,US
+1159526656,1159528191,CA
+1159528192,1159668479,US
 1159668480,1159668735,CA
 1159668736,1159685377,US
 1159685378,1159685379,NL
@@ -26847,11 +27274,23 @@
 1160011776,1160019967,CA
 1160019968,1160364031,US
 1160364032,1160368127,CA
-1160368128,1160392703,US
+1160368128,1160373247,US
+1160373248,1160373503,AE
+1160373504,1160392703,US
 1160392704,1160392959,CA
 1160392960,1160393727,US
 1160393728,1160396799,CA
-1160396800,1160410551,US
+1160396800,1160405759,US
+1160405760,1160406015,DO
+1160406016,1160406319,US
+1160406320,1160406335,DO
+1160406336,1160409423,US
+1160409424,1160409439,PT
+1160409440,1160409599,US
+1160409600,1160410111,CO
+1160410112,1160410511,US
+1160410512,1160410519,EC
+1160410520,1160410551,US
 1160410552,1160410559,EC
 1160410560,1160425471,US
 1160425472,1160429567,CA
@@ -26917,29 +27356,17 @@
 1161427200,1161427455,VG
 1161427456,1161428223,AG
 1161428224,1161428991,KN
-1161428992,1161429031,CA
-1161429032,1161429039,SE
-1161429040,1161429111,CA
+1161428992,1161429111,CA
 1161429112,1161429135,US
-1161429136,1161429151,CA
-1161429152,1161429167,US
-1161429168,1161429175,CA
+1161429136,1161429175,CA
 1161429176,1161429199,US
 1161429200,1161429215,CA
 1161429216,1161429255,US
-1161429256,1161429263,CA
-1161429264,1161429279,US
-1161429280,1161429295,CA
-1161429296,1161429327,US
-1161429328,1161429335,CA
-1161429336,1161429351,US
+1161429256,1161429343,CA
+1161429344,1161429351,US
 1161429352,1161429375,CA
 1161429376,1161429407,US
-1161429408,1161429431,CA
-1161429432,1161429439,US
-1161429440,1161429535,CA
-1161429536,1161429543,US
-1161429544,1161429551,CA
+1161429408,1161429551,CA
 1161429552,1161429599,US
 1161429600,1161429647,CA
 1161429648,1161429663,US
@@ -26949,43 +27376,28 @@
 1161429720,1161429727,US
 1161429728,1161429759,CA
 1161429760,1161429775,US
-1161429776,1161429855,CA
-1161429856,1161429863,US
-1161429864,1161429887,CA
-1161429888,1161429903,US
-1161429904,1161429983,CA
-1161429984,1161430015,US
-1161430016,1161430023,FI
-1161430024,1161430111,CA
+1161429776,1161430111,CA
 1161430112,1161430159,US
 1161430160,1161430191,CA
 1161430192,1161430207,US
 1161430208,1161430431,CA
 1161430432,1161430447,US
-1161430448,1161430455,CA
-1161430456,1161430463,US
-1161430464,1161430527,CA
+1161430448,1161430527,CA
 1161430528,1161430543,US
-1161430544,1161430559,CA
-1161430560,1161430567,US
-1161430568,1161430575,CA
+1161430544,1161430575,CA
 1161430576,1161430591,US
-1161430592,1161430703,CA
-1161430704,1161430719,US
-1161430720,1161430727,CA
-1161430728,1161430735,FI
-1161430736,1161430799,CA
+1161430592,1161430639,CA
+1161430640,1161430647,US
+1161430648,1161430799,CA
 1161430800,1161430815,US
-1161430816,1161430847,CA
-1161430848,1161430911,US
+1161430816,1161430879,CA
+1161430880,1161430911,US
 1161430912,1161430943,CA
-1161430944,1161431007,US
-1161431008,1161431039,CA
+1161430944,1161430975,US
+1161430976,1161431039,CA
 1161431040,1161431295,CN
 1161431296,1161432063,US
-1161432064,1161432479,CA
-1161432480,1161432511,US
-1161432512,1161432831,CA
+1161432064,1161432831,CA
 1161432832,1161433087,US
 1161433088,1161437183,CA
 1161437184,1161453567,US
@@ -27011,7 +27423,11 @@
 1161830853,1161830853,BZ
 1161830854,1161833967,US
 1161833968,1161833975,DE
-1161833976,1161835948,US
+1161833976,1161834712,US
+1161834713,1161834713,BZ
+1161834714,1161834743,US
+1161834744,1161834744,BZ
+1161834745,1161835948,US
 1161835949,1161835949,BZ
 1161835950,1161837567,US
 1161837568,1161837823,JP
@@ -27058,17 +27474,31 @@
 1162475008,1162477567,BB
 1162477568,1162715135,US
 1162715136,1162723327,CA
-1162723328,1162807807,US
+1162723328,1162806527,US
+1162806528,1162806783,PR
+1162806784,1162807295,US
+1162807296,1162807807,PR
 1162807808,1162808319,LC
-1162808320,1162831871,US
+1162808320,1162809343,PR
+1162809344,1162811391,US
+1162811392,1162811647,CW
+1162811648,1162812159,US
+1162812160,1162812415,DO
+1162812416,1162813439,BS
+1162813440,1162823679,US
+1162823680,1162825727,GT
+1162825728,1162831871,US
 1162831872,1162833919,PR
-1162833920,1162854399,US
-1162854400,1162856447,JM
-1162856448,1162856703,US
-1162856704,1162857215,JM
-1162857216,1162857471,US
-1162857472,1162857727,JM
-1162857728,1162862591,US
+1162833920,1162835967,GT
+1162835968,1162836223,BS
+1162836224,1162836735,CW
+1162836736,1162836991,US
+1162836992,1162838015,BS
+1162838016,1162840063,PR
+1162840064,1162853375,US
+1162853376,1162854399,PR
+1162854400,1162858495,JM
+1162858496,1162862591,US
 1162862592,1162863359,PR
 1162863360,1162863423,US
 1162863424,1162863487,PR
@@ -27084,10 +27514,12 @@
 1162925984,1162926015,AU
 1162926016,1162926071,US
 1162926072,1162926079,AU
-1162926080,1162928383,US
-1162930176,1162932223,CA
+1162926080,1162929151,US
+1162929152,1162932223,CA
 1162932224,1163370495,US
-1163378688,1163399167,US
+1163378688,1163386367,US
+1163386368,1163386879,CA
+1163386880,1163399167,US
 1163399168,1163399423,WS
 1163399424,1163400959,US
 1163400960,1163401215,BD
@@ -27095,9 +27527,9 @@
 1163401472,1163401727,ID
 1163401728,1163407359,US
 1163407360,1163411455,CA
-1163411456,1163468799,US
-1163468800,1163472895,PR
-1163472896,1163526143,US
+1163411456,1163469823,US
+1163469824,1163470079,PR
+1163470080,1163526143,US
 1163526144,1163529215,CA
 1163529216,1163529727,US
 1163529728,1163529983,CA
@@ -27185,7 +27617,9 @@
 1168229376,1168229631,JP
 1168229632,1168269887,US
 1168269888,1168269951,GB
-1168269952,1168420863,US
+1168269952,1168279295,US
+1168279296,1168279359,CA
+1168279360,1168420863,US
 1168420864,1168424959,CA
 1168424960,1168461823,US
 1168461824,1168465919,CA
@@ -27195,7 +27629,9 @@
 1168510976,1168515071,CA
 1168515072,1168535551,US
 1168535552,1168539647,CA
-1168539648,1168670719,US
+1168539648,1168593151,US
+1168593152,1168593279,CA
+1168593280,1168670719,US
 1168670720,1168687103,CA
 1168687104,1168695807,US
 1168695808,1168696063,GB
@@ -27278,7 +27714,9 @@
 1170191104,1170191359,SG
 1170191360,1170191871,DE
 1170191872,1170192383,HK
-1170192384,1170350079,US
+1170192384,1170227199,US
+1170227200,1170231295,NL
+1170231296,1170350079,US
 1170350080,1170355199,CA
 1170355200,1170357247,US
 1170357248,1170358271,CA
@@ -27574,7 +28012,9 @@
 1210925056,1210941439,CA
 1210941440,1210994687,US
 1210994688,1210997759,CA
-1210997760,1211032271,US
+1210997760,1211014143,US
+1211014144,1211014655,PR
+1211014656,1211032271,US
 1211032272,1211032287,DO
 1211032288,1211033087,US
 1211033088,1211033599,CO
@@ -27733,7 +28173,9 @@
 1244848128,1244852223,CA
 1244852224,1244864511,US
 1244864512,1244872703,CA
-1244872704,1245183999,US
+1244872704,1245144575,US
+1245144576,1245144831,CH
+1245144832,1245183999,US
 1245184000,1245446143,CA
 1245446144,1245647359,US
 1245647360,1245647615,AR
@@ -27805,15 +28247,13 @@
 1246890432,1246890463,CA
 1246890464,1246890464,US
 1246890465,1246890495,CA
-1246890496,1246893567,US
-1246893568,1246893715,JP
-1246893716,1246893716,US
-1246893717,1246893823,JP
-1246893824,1246895103,US
+1246890496,1246895103,US
 1246895104,1246895615,NL
 1246895616,1246900223,US
 1246900224,1246900287,HK
-1246900288,1246904575,US
+1246900288,1246902783,US
+1246902784,1246903039,NL
+1246903040,1246904575,US
 1246904576,1246905343,CA
 1246905344,1246905599,US
 1246905600,1246912511,CA
@@ -27910,7 +28350,9 @@
 1249210368,1249212415,KY
 1249212416,1249217535,US
 1249217536,1249218559,CA
-1249218560,1249234687,US
+1249218560,1249227263,US
+1249227264,1249227519,VG
+1249227520,1249234687,US
 1249234688,1249234943,GB
 1249234944,1249236991,US
 1249236992,1249239039,KY
@@ -27966,7 +28408,18 @@
 1249533952,1249542143,US
 1249542144,1249544191,CA
 1249544192,1249545215,US
-1249546240,1249562623,US
+1249546240,1249550351,US
+1249550352,1249550367,GB
+1249550368,1249550375,HK
+1249550376,1249550391,US
+1249550392,1249550399,TW
+1249550400,1249550863,US
+1249550864,1249550879,GB
+1249550880,1249550903,US
+1249550904,1249550911,GB
+1249550912,1249550935,US
+1249550936,1249550943,BY
+1249550944,1249562623,US
 1249562624,1249564671,CA
 1249564672,1249571839,US
 1249571840,1249572863,CA
@@ -28087,7 +28540,9 @@
 1249754624,1249754879,SG
 1249754880,1249796095,US
 1249796096,1249804287,CA
-1249804288,1249886207,US
+1249804288,1249851903,US
+1249851904,1249852159,FR
+1249852160,1249886207,US
 1249886208,1249902591,CA
 1249902592,1252535295,US
 1252535296,1252536319,VI
@@ -28103,11 +28558,21 @@
 1254992384,1254998015,CA
 1254998016,1255002111,US
 1255002112,1255006207,CA
-1255006208,1255047167,US
+1255006208,1255011583,US
+1255011584,1255011839,CA
+1255011840,1255047167,US
 1255047168,1255055359,CA
-1255055360,1255276543,US
+1255055360,1255210495,US
+1255210496,1255210751,DE
+1255210752,1255264511,US
+1255264512,1255264767,SG
+1255264768,1255274495,US
+1255274496,1255274751,SG
+1255274752,1255276543,US
 1255276544,1255342079,CA
-1255342080,1255489535,US
+1255342080,1255367167,US
+1255367168,1255367423,DE
+1255367424,1255489535,US
 1255489536,1255505919,PR
 1255505920,1255514111,US
 1255514112,1255522303,CA
@@ -28117,13 +28582,19 @@
 1255588352,1255588607,NL
 1255588608,1255669759,US
 1255669760,1255735295,CA
-1255735296,1255972863,US
+1255735296,1255770367,US
+1255770368,1255770623,CA
+1255770624,1255792127,US
+1255792128,1255792383,IL
+1255792384,1255972863,US
 1255972864,1255981055,CA
 1255981056,1256001535,US
 1256001536,1256005631,CA
 1256005632,1256030207,US
 1256030208,1256034303,CA
-1256034304,1256079359,US
+1256034304,1256054399,US
+1256054400,1256054783,CZ
+1256054784,1256079359,US
 1256079360,1256087551,KY
 1256087552,1263525887,US
 1263525888,1263534079,CA
@@ -28162,7 +28633,9 @@
 1275665408,1275666431,US
 1275666432,1275674623,CA
 1275674624,1275707391,US
-1275707392,1275715583,CA
+1275707392,1275711487,CA
+1275711488,1275712511,US
+1275712512,1275715583,CA
 1275715584,1275756543,US
 1275756544,1275772927,CA
 1275772928,1275789311,US
@@ -28297,7 +28770,8 @@
 1295253504,1295319039,UA
 1295319040,1295384575,SE
 1295384576,1295450111,PT
-1295450112,1295515647,PL
+1295450112,1295481855,PL
+1295482880,1295515647,PL
 1295515648,1295762431,CH
 1295762432,1295763455,GB
 1295763456,1295777791,CH
@@ -28399,8 +28873,8 @@
 1296252648,1296252655,GB
 1296252656,1296252667,IE
 1296252668,1296252671,GB
-1296252672,1296252871,IE
-1296252872,1296252879,DE
+1296252672,1296252875,IE
+1296252876,1296252879,DE
 1296252880,1296254207,IE
 1296254208,1296254463,US
 1296254464,1296256839,IE
@@ -28424,7 +28898,8 @@
 1296263675,1296263679,IE
 1296263680,1296263935,US
 1296263936,1296264175,IE
-1296264176,1296264191,BE
+1296264176,1296264183,BE
+1296264184,1296264191,NO
 1296264192,1296264287,GB
 1296264288,1296264303,US
 1296264304,1296265175,GB
@@ -28523,7 +28998,7 @@
 1296678792,1296678799,NG
 1296678800,1296678903,JE
 1296678904,1296678911,NG
-1296678912,1296680959,SA
+1296678912,1296680959,AE
 1296680960,1296683007,ES
 1296683008,1296685055,IE
 1296685056,1296687103,TR
@@ -28714,10 +29189,14 @@
 1297727488,1297743871,MD
 1297743872,1297760255,DE
 1297760256,1297776639,LT
-1297776640,1297782783,DE
-1297782784,1297784319,RU
-1297784320,1297790463,DE
-1297790464,1297791231,RU
+1297776640,1297783295,DE
+1297783296,1297784319,RU
+1297784320,1297786367,DE
+1297786368,1297788415,RU
+1297788416,1297788671,DE
+1297788672,1297789951,RU
+1297789952,1297790463,DE
+1297790464,1297791231,RO
 1297791232,1297793023,DE
 1297793024,1297809407,UA
 1297809408,1297825791,PL
@@ -28870,24 +29349,22 @@
 1299178496,1299180543,CH
 1299180544,1299181567,GB
 1299181568,1299182591,DK
-1299183616,1299183871,SE
 1299184640,1299185663,GB
 1299185664,1299447807,PL
 1299447808,1299622911,AT
 1299622912,1299623935,DE
 1299623936,1299709951,AT
-1299709952,1299724287,UA
-1299724288,1299725311,RU
-1299725312,1299779071,UA
+1299709952,1299779071,UA
 1299779072,1299779327,RU
 1299779328,1299935231,UA
 1299935232,1299935999,BG
 1299936000,1299936255,UA
 1299936256,1299937279,BG
 1299937280,1299955711,UA
-1299955712,1299963903,RU
-1299963904,1299971071,UA
-1299971072,1299972095,RU
+1299955712,1299959807,RU
+1299959808,1299961855,UA
+1299961856,1299963903,RU
+1299963904,1299972095,UA
 1299972096,1300234239,IL
 1300234240,1300824063,FR
 1300824064,1300874239,IL
@@ -28914,7 +29391,6 @@
 1306279936,1306288127,IT
 1306288128,1306296319,AT
 1306296320,1306312703,RU
-1306312704,1306315775,UZ
 1306315776,1306316031,KG
 1306316032,1306316287,RU
 1306316288,1306316799,KZ
@@ -29380,7 +29856,6 @@
 1311311872,1311315967,CZ
 1311315968,1311318015,PL
 1311318016,1311320063,RU
-1311320064,1311322111,FR
 1311322112,1311323135,DE
 1311323136,1311324159,FR
 1311324160,1311326207,LB
@@ -29447,7 +29922,6 @@
 1315729408,1315729663,IE
 1315729920,1315730943,NL
 1315732224,1315732991,DE
-1315732992,1315733247,NL
 1315733504,1315737599,NL
 1315737600,1315741695,CZ
 1315741696,1315745791,LB
@@ -29518,9 +29992,7 @@
 1317076992,1317093887,BE
 1317093888,1317094143,NL
 1317094144,1317109759,BE
-1317109760,1317126399,GB
-1317126400,1317126655,US
-1317126656,1317142527,GB
+1317109760,1317142527,GB
 1317142528,1317175295,PT
 1317175296,1317208063,BG
 1317208064,1317240831,HU
@@ -29552,7 +30024,9 @@
 1317617664,1317625855,YE
 1317625856,1317627903,DE
 1317627904,1317629951,RU
-1317629952,1317636095,GB
+1317629952,1317634047,GB
+1317634048,1317634303,IE
+1317634304,1317636095,GB
 1317636096,1317642495,IE
 1317642496,1317643316,GB
 1317643317,1317643317,IE
@@ -29621,7 +30095,10 @@
 1317908480,1317909503,FR
 1317909504,1317912575,LU
 1317912576,1317928959,GB
-1317928960,1317945343,BG
+1317928960,1317929215,US
+1317929216,1317931007,BG
+1317931008,1317931263,US
+1317931264,1317945343,BG
 1317945344,1317978111,AT
 1317994496,1318010879,DE
 1318010880,1318027263,DK
@@ -29808,7 +30285,7 @@
 1332613376,1332614143,UA
 1332614144,1332614399,BY
 1332614400,1332614655,NL
-1332614656,1332614783,RU
+1332614656,1332614783,UA
 1332614784,1332614911,KZ
 1332614912,1332615167,RO
 1332615168,1332615423,DE
@@ -29845,7 +30322,7 @@
 1333527040,1333528575,BG
 1333528576,1333528831,GB
 1333528832,1333546239,BG
-1333546240,1333546495,US
+1333546240,1333546495,BR
 1333546496,1333551103,BG
 1333551104,1333559295,PL
 1333559296,1333592063,UA
@@ -29905,9 +30382,7 @@
 1334379072,1334379135,PL
 1334379136,1334379263,FR
 1334379264,1334379519,PL
-1334379520,1334379583,FR
-1334379584,1334379591,PL
-1334379592,1334379871,FR
+1334379520,1334379871,FR
 1334379872,1334379887,PT
 1334379888,1334379971,FR
 1334379972,1334379975,DE
@@ -29923,9 +30398,7 @@
 1334381888,1334381919,IT
 1334381920,1334381983,FR
 1334381984,1334382015,FI
-1334382016,1334382903,FR
-1334382904,1334382911,PL
-1334382912,1334382975,FR
+1334382016,1334382975,FR
 1334382976,1334383103,GB
 1334383104,1334383615,FR
 1334383616,1334383679,DE
@@ -30075,16 +30548,16 @@
 1334673408,1334677503,GB
 1334677504,1334681599,FI
 1334681600,1334681855,PL
-1334681856,1334682111,NL
+1334681856,1334682111,US
 1334682112,1334682367,IE
-1334682368,1334682623,NL
+1334682368,1334682623,US
 1334682624,1334682879,NO
 1334682880,1334682900,NL
 1334682901,1334682901,DK
 1334682902,1334683135,NL
 1334683136,1334683391,CZ
 1334683392,1334683647,CH
-1334683648,1334683903,NL
+1334683648,1334683903,HK
 1334683904,1334684031,DE
 1334684032,1334684159,NL
 1334684160,1334684415,SE
@@ -30111,9 +30584,7 @@
 1334724352,1334724607,SE
 1334724608,1334724863,US
 1334724864,1334725631,NL
-1334725632,1334726143,SE
-1334726144,1334726399,LU
-1334726400,1334726655,SE
+1334725632,1334726655,SE
 1334726656,1334729983,RU
 1334729984,1334730495,KZ
 1334730496,1334734847,RU
@@ -30924,6 +31395,7 @@
 1347825664,1347829759,IT
 1347829760,1347833855,SE
 1347833856,1347837951,DE
+1347838411,1347838411,RO
 1347838720,1347846143,RO
 1347846144,1347850239,NO
 1347850240,1347854335,IT
@@ -31125,7 +31597,9 @@
 1353267200,1353267711,IE
 1353267712,1353267751,GB
 1353267752,1353267759,IE
-1353267760,1353271317,GB
+1353267760,1353270615,GB
+1353270616,1353270623,IT
+1353270624,1353271317,GB
 1353271318,1353271318,AT
 1353271319,1353271567,GB
 1353271568,1353271575,AT
@@ -31215,7 +31689,6 @@
 1355870208,1355872255,FI
 1355872256,1355873279,IT
 1355873280,1355873791,GB
-1355873792,1355874047,GG
 1355874048,1355874303,DE
 1355874304,1355907071,DK
 1355907072,1355923455,GB
@@ -31305,6 +31778,7 @@
 1357329416,1357332479,GB
 1357335808,1357336063,IT
 1357337600,1357337647,NL
+1357337652,1357337652,NL
 1357337664,1357337727,NL
 1357340672,1357341695,GB
 1357342720,1357344259,GB
@@ -31320,7 +31794,7 @@
 1357347680,1357347727,FR
 1357347744,1357347839,FR
 1357347840,1357348095,PL
-1357348352,1357348359,ES
+1357348352,1357348363,ES
 1357348384,1357348415,ES
 1357348480,1357348607,ES
 1357350400,1357350647,GB
@@ -31517,7 +31991,8 @@
 1358295040,1358299135,RU
 1358299136,1358303231,DZ
 1358303232,1358306303,RU
-1358306304,1358306815,GB
+1358306304,1358306559,AL
+1358306560,1358306815,GB
 1358306816,1358307071,PT
 1358307072,1358307327,LV
 1358307328,1358315519,DE
@@ -31803,8 +32278,8 @@
 1360064512,1360068607,GE
 1360068608,1360072703,RU
 1360072704,1360076799,CH
-1360076800,1360083263,NL
-1360083264,1360089087,GB
+1360076800,1360082943,NL
+1360082944,1360089087,GB
 1360089088,1360093183,AZ
 1360093184,1360101375,DE
 1360101376,1360105471,UA
@@ -32269,8 +32744,7 @@
 1365090304,1365094399,NO
 1365094400,1365098495,FR
 1365098496,1365102591,HU
-1365102592,1365102655,FR
-1365102656,1365106687,ES
+1365102592,1365106687,ES
 1365106688,1365110783,GB
 1365110784,1365114879,FR
 1365114880,1365118975,BA
@@ -32461,8 +32935,8 @@
 1371996672,1371996927,GA
 1371996928,1372000255,GB
 1372000256,1372001279,UG
-1372001280,1372012543,GB
-1372012544,1372016639,DE
+1372001280,1372014079,GB
+1372014080,1372016639,DE
 1372016640,1372017583,GB
 1372017584,1372017599,CD
 1372017600,1372020223,GB
@@ -32478,7 +32952,7 @@
 1372026624,1372026879,KE
 1372026880,1372027903,IL
 1372027904,1372031999,GB
-1372032000,1372032255,CM
+1372032000,1372032255,ZM
 1372032256,1372043519,GB
 1372043520,1372043775,NG
 1372043776,1372045567,GB
@@ -32537,7 +33011,7 @@
 1372699904,1372700159,DE
 1372702720,1372703231,DE
 1372703616,1372703743,DE
-1372704768,1372713983,DE
+1372708864,1372713983,DE
 1372715008,1372717055,DE
 1372717056,1372749823,PL
 1372749824,1372782591,DE
@@ -32762,7 +33236,7 @@
 1383522304,1383523839,BG
 1383523840,1383524095,GB
 1383524096,1383524607,BG
-1383524608,1383524863,US
+1383524608,1383524863,BR
 1383524864,1383525119,GB
 1383525120,1383530495,BG
 1383530496,1383538687,DE
@@ -32783,7 +33257,7 @@
 1384193024,1384194047,DE
 1384196096,1384197119,ES
 1384198144,1384202239,GB
-1384206336,1384218623,GB
+1384203264,1384218623,GB
 1384218624,1384251391,EG
 1384251392,1384267775,FI
 1384267776,1384284159,CH
@@ -32881,12 +33355,8 @@
 1385275392,1385283583,IT
 1385283584,1385286143,DE
 1385286144,1385287679,GB
-1385289728,1385290288,GB
-1385290289,1385290289,RE
-1385290290,1385290631,GB
-1385290632,1385290632,IS
-1385290633,1385290751,GB
-1385291344,1385291344,IS
+1385289728,1385290751,GB
+1385291264,1385291519,ZA
 1385291520,1385291775,GB
 1385291776,1385299967,TR
 1385299968,1385303039,BG
@@ -33123,8 +33593,6 @@
 1388583424,1388584959,FR
 1388587264,1388589823,GB
 1388591104,1388591359,AU
-1388591616,1388591631,US
-1388591648,1388591663,US
 1388593152,1388601343,RU
 1388601344,1388609535,SE
 1388609536,1388617727,RU
@@ -33465,12 +33933,12 @@
 1401460736,1401462783,PL
 1401462784,1401464831,FR
 1401464832,1401466879,IE
-1401466880,1401468927,RS
 1401468928,1401470975,ES
 1401470976,1401473023,NL
 1401473024,1401475071,CZ
 1401475072,1401477119,FR
-1401477120,1401478143,DE
+1401477120,1401477631,SG
+1401477632,1401478143,US
 1401478144,1401479167,LB
 1401479168,1401481215,PL
 1401481216,1401485311,RU
@@ -33587,13 +34055,13 @@
 1401907200,1401908223,RU
 1401908224,1401909247,ES
 1401909248,1401910271,DE
-1401910272,1401911039,GB
-1401911040,1401911055,IE
-1401911056,1401911071,ES
+1401910272,1401910783,GB
+1401910784,1401911039,RU
+1401911040,1401911071,ES
 1401911072,1401911087,PA
 1401911088,1401911103,PL
 1401911104,1401911119,CH
-1401911120,1401911295,GB
+1401911120,1401911295,ES
 1401911296,1401913343,DK
 1401913344,1401917439,PL
 1401917440,1401919487,BG
@@ -34066,11 +34534,7 @@
 1407520576,1407520583,NG
 1407520584,1407520623,GB
 1407520624,1407520631,NG
-1407520632,1407522375,GB
-1407522376,1407522383,CD
-1407522384,1407522471,GB
-1407522472,1407522479,CD
-1407522480,1407537087,GB
+1407520632,1407537087,GB
 1407537088,1407537095,GH
 1407537096,1407538327,GB
 1407538328,1407538335,CD
@@ -34534,7 +34998,9 @@
 1424601888,1424601903,NL
 1424601904,1424603023,GB
 1424603024,1424603039,US
-1424603040,1424604159,GB
+1424603040,1424604127,GB
+1424604128,1424604135,ES
+1424604136,1424604159,GB
 1424604160,1424604671,DK
 1424604672,1424604975,GB
 1424604976,1424604991,NL
@@ -34663,9 +35129,12 @@
 1425467392,1425469439,CH
 1425469440,1425471487,DK
 1425471488,1425473535,DE
-1425473536,1425474559,RO
+1425473536,1425473791,RO
+1425473792,1425474047,GG
+1425474048,1425474559,RO
 1425474560,1425475583,US
-1425475584,1425478143,RO
+1425475584,1425477631,NL
+1425477632,1425478143,RO
 1425478144,1425478655,ES
 1425478656,1425479167,GB
 1425479168,1425479679,RO
@@ -35237,8 +35706,7 @@
 1438876928,1438877183,IQ
 1438877184,1438877951,LT
 1438877952,1438878207,LB
-1438878208,1438891007,LT
-1438891008,1438892031,RU
+1438878208,1438892031,LT
 1438892032,1438908415,CH
 1438908416,1438924799,GR
 1438924800,1438941183,NO
@@ -35536,8 +36004,8 @@
 1441734656,1441742847,RU
 1441742848,1441751039,CZ
 1441751040,1441759231,DE
-1441759232,1441763071,BG
-1441763072,1441763327,ES
+1441759232,1441761279,BG
+1441761280,1441763327,ES
 1441763328,1441767423,BG
 1441767424,1441775615,IT
 1441775616,1441783807,IR
@@ -35636,7 +36104,8 @@
 1449687040,1449688063,GR
 1449688064,1449688575,RO
 1449688576,1449688831,GB
-1449688832,1449690623,RO
+1449688832,1449689087,NL
+1449689088,1449690623,RO
 1449690624,1449690879,IE
 1449690880,1449691135,IT
 1449691136,1449695231,RO
@@ -35731,7 +36200,7 @@
 1449783296,1449783551,DE
 1449783552,1449783807,RO
 1449783808,1449784319,GB
-1449784320,1449785343,RO
+1449784320,1449785343,NL
 1449785344,1449786367,GR
 1449786368,1449786879,RO
 1449786880,1449787391,FR
@@ -35798,7 +36267,7 @@
 1449865728,1449867263,RO
 1449867264,1449867519,ES
 1449867520,1449868799,RO
-1449868800,1449869055,PL
+1449868800,1449869055,US
 1449869056,1449869311,RO
 1449869312,1449870335,MD
 1449870336,1449871359,RO
@@ -35994,7 +36463,15 @@
 1467473920,1467482111,RU
 1467482112,1467484927,BG
 1467484928,1467485183,IL
-1467485184,1467596799,BG
+1467485184,1467502591,BG
+1467502592,1467503615,DE
+1467503616,1467525119,BG
+1467525120,1467527167,DE
+1467527168,1467543551,BG
+1467543552,1467544575,DE
+1467544576,1467566079,BG
+1467566080,1467567103,DE
+1467567104,1467596799,BG
 1467596800,1467600895,DE
 1467600896,1467604991,BG
 1467604992,1467609087,DE
@@ -36139,7 +36616,7 @@
 1475284992,1475287039,GB
 1475287040,1475291135,RU
 1475291136,1475293183,PL
-1475293184,1475295231,KZ
+1475293184,1475295231,CZ
 1475295232,1475297279,SK
 1475297280,1475299327,DK
 1475299328,1475301375,PL
@@ -36306,7 +36783,8 @@
 1476064512,1476067327,RU
 1476067328,1476075519,TR
 1476075520,1476083711,NL
-1476083712,1476100095,RU
+1476083712,1476087807,MD
+1476087808,1476100095,RU
 1476100096,1476108287,IR
 1476108288,1476116479,RU
 1476116480,1476124671,SE
@@ -36322,9 +36800,7 @@
 1476165120,1476165631,BH
 1476165632,1476173823,HR
 1476173824,1476182015,BG
-1476182016,1476186367,GB
-1476186368,1476186383,IE
-1476186384,1476189382,GB
+1476182016,1476189382,GB
 1476189383,1476189383,IE
 1476189384,1476190207,GB
 1476190208,1476198399,BY
@@ -36615,7 +37091,8 @@
 1490026496,1490028543,NL
 1490028544,1490028671,GB
 1490028672,1490028799,DE
-1490028800,1490042879,NL
+1490028800,1490038783,NL
+1490039040,1490042879,NL
 1490042880,1490053375,CZ
 1490053376,1490054143,PL
 1490054144,1490059263,CZ
@@ -36800,6 +37277,7 @@
 1495148544,1495150591,FR
 1495150848,1495151103,GB
 1495151616,1495153663,FR
+1495154496,1495154527,IN
 1495158784,1495159295,GB
 1495160240,1495160255,FR
 1495160256,1495160263,GB
@@ -36814,6 +37292,7 @@
 1495163408,1495163411,ES
 1495163412,1495163415,IT
 1495163552,1495163567,FR
+1495165191,1495165191,US
 1495165192,1495165195,NL
 1495165408,1495165439,FR
 1495165696,1495165951,ES
@@ -36843,8 +37322,8 @@
 1495228416,1495230463,NL
 1495230464,1495234559,RU
 1495234560,1495235583,LT
-1495235584,1495236095,GB
-1495236096,1495236351,JP
+1495235584,1495235839,GB
+1495235840,1495236351,JP
 1495236352,1495236607,NL
 1495238656,1495240703,DE
 1495240704,1495242751,FR
@@ -36869,7 +37348,9 @@
 1495269376,1495277567,IR
 1495277568,1495279615,SE
 1495279616,1495279871,DE
-1495279872,1495283711,RO
+1495279872,1495280127,RO
+1495280128,1495280383,NL
+1495280384,1495283711,RO
 1495283712,1495285759,MD
 1495285760,1495287807,US
 1495287808,1495289855,SE
@@ -37004,7 +37485,7 @@
 1495425535,1495426047,GB
 1495426048,1495426559,RO
 1495426560,1495426815,GB
-1495426816,1495427071,PL
+1495426816,1495427071,US
 1495427072,1495427583,GB
 1495427584,1495428095,RO
 1495428096,1495428351,GB
@@ -37125,13 +37606,7 @@
 1495541248,1495541759,GB
 1495541760,1495543807,ES
 1495543808,1495547903,IR
-1495547904,1495548159,US
-1495548160,1495548671,GB
-1495548672,1495548703,RU
-1495548704,1495548735,RO
-1495548736,1495548927,RU
-1495548928,1495549695,GB
-1495549696,1495549951,RU
+1495547904,1495549951,GB
 1495549952,1495550463,RO
 1495550464,1495550975,BE
 1495550976,1495551999,RO
@@ -37141,7 +37616,8 @@
 1495554816,1495555071,SE
 1495555072,1495556095,RO
 1495556096,1495560191,IR
-1495560192,1495566335,RO
+1495560192,1495564287,GB
+1495564288,1495566335,RO
 1495566336,1495566591,GB
 1495566592,1495566847,RO
 1495566848,1495567359,GB
@@ -37199,8 +37675,7 @@
 1495620608,1495621375,GB
 1495621376,1495621631,RO
 1495621632,1495621887,GB
-1495621888,1495622143,BG
-1495622144,1495623167,RO
+1495621888,1495623167,RO
 1495623168,1495623679,IR
 1495623680,1495623935,MD
 1495623936,1495624191,NL
@@ -37230,7 +37705,7 @@
 1495653376,1495654399,KZ
 1495654400,1495654911,RO
 1495654912,1495655167,ES
-1495655168,1495655423,GB
+1495655168,1495655423,BG
 1495655424,1495656447,US
 1495656448,1495656959,RO
 1495656960,1495657215,GB
@@ -37286,7 +37761,9 @@
 1495730176,1495731199,IR
 1495731200,1495732223,RO
 1495732224,1495744511,ES
-1495744512,1495745791,RO
+1495744512,1495745279,RO
+1495745280,1495745535,GB
+1495745536,1495745791,RO
 1495745792,1495746047,GB
 1495746048,1495747583,RO
 1495747584,1495748607,MD
@@ -37309,8 +37786,7 @@
 1495759872,1495760127,ES
 1495760128,1495760895,RO
 1495760896,1495762943,DE
-1495762944,1495764735,GB
-1495764736,1495764991,AU
+1495762944,1495764991,GB
 1495764992,1495765503,BG
 1495765504,1495765759,GB
 1495765760,1495766015,NL
@@ -37342,7 +37818,7 @@
 1495790336,1495791359,RO
 1495791360,1495791615,GB
 1495791616,1495793407,RO
-1495793408,1495793663,PL
+1495793408,1495793663,US
 1495793664,1495794687,DE
 1495794688,1495795199,LT
 1495795200,1495795327,FR
@@ -37395,7 +37871,9 @@
 1495845632,1495845887,GB
 1495845888,1495846655,RO
 1495846656,1495847423,GB
-1495847424,1495848191,RO
+1495847424,1495847679,RO
+1495847680,1495847935,NL
+1495847936,1495848191,RO
 1495848192,1495848447,PL
 1495848448,1495848959,RO
 1495848960,1495848979,SE
@@ -37447,9 +37925,7 @@
 1495927296,1495927551,GB
 1495927552,1495931135,RO
 1495931136,1495931391,IT
-1495931392,1495931647,RO
-1495931648,1495931903,BG
-1495931904,1495932159,RO
+1495931392,1495932159,RO
 1495932160,1495932415,US
 1495932416,1495932671,RO
 1495932672,1495932927,GB
@@ -37641,7 +38117,7 @@
 1496137728,1496138495,RO
 1496138496,1496138751,BG
 1496138752,1496139263,IR
-1496139264,1496139775,PL
+1496139264,1496139775,US
 1496139776,1496141823,RO
 1496141824,1496142335,IR
 1496142336,1496142591,GB
@@ -37660,11 +38136,12 @@
 1496154112,1496158207,SY
 1496158208,1496160255,RO
 1496160256,1496162303,IR
-1496162304,1496175615,RO
+1496162304,1496166399,RO
+1496166400,1496170495,GB
+1496170496,1496175615,RO
 1496175616,1496177663,IT
 1496177664,1496178687,ES
-1496178688,1496178943,RO
-1496178944,1496179199,BG
+1496178688,1496179199,RO
 1496179200,1496179455,SE
 1496179456,1496179711,DE
 1496179712,1496179967,RO
@@ -37745,7 +38222,9 @@
 1496262656,1496263167,BG
 1496263168,1496263679,RO
 1496263680,1496264703,GR
-1496264704,1496268543,RO
+1496264704,1496266751,RO
+1496266752,1496267263,NL
+1496267264,1496268543,RO
 1496268544,1496268799,GB
 1496268800,1496272895,IR
 1496272896,1496274943,SY
@@ -37825,8 +38304,8 @@
 1500188672,1500188735,FR
 1500188736,1500188799,GB
 1500188800,1500190719,FR
-1500190720,1500191999,GB
-1500192000,1500192767,NL
+1500190720,1500191743,GB
+1500191744,1500192767,NL
 1500192768,1500194815,RU
 1500194816,1500196863,GB
 1500196864,1500198911,ES
@@ -37924,7 +38403,9 @@
 1502979312,1502979327,FR
 1502979328,1502980351,IE
 1502980352,1502980607,US
-1502980608,1502981239,IE
+1502980608,1502981215,IE
+1502981216,1502981223,GB
+1502981224,1502981239,IE
 1502981240,1502981247,FR
 1502981248,1502986239,IE
 1502986240,1503002623,NL
@@ -37963,9 +38444,7 @@
 1503854592,1503887359,RU
 1503887360,1503896411,DE
 1503896412,1503896415,AT
-1503896416,1503897367,DE
-1503897368,1503897375,BE
-1503897376,1503898175,DE
+1503896416,1503898175,DE
 1503898176,1503898183,IT
 1503898184,1503898239,DE
 1503898240,1503898303,RO
@@ -38044,7 +38523,11 @@
 1505316608,1505316863,SI
 1505316864,1505320959,RU
 1505320960,1505329151,AT
-1505329152,1505333247,US
+1505329152,1505331855,US
+1505331856,1505331871,GB
+1505331872,1505332591,US
+1505332592,1505332639,GB
+1505332640,1505333247,US
 1505333248,1505336575,IE
 1505336576,1505336831,GB
 1505336832,1505337343,IE
@@ -38065,8 +38548,8 @@
 1505427456,1505435647,UA
 1505435648,1505443839,MD
 1505443840,1505460223,GB
-1505460224,1505470975,CZ
-1505470976,1505475583,US
+1505460224,1505471487,CZ
+1505471488,1505475583,US
 1505475584,1505478655,CZ
 1505478656,1505482751,DE
 1505482752,1505484799,LB
@@ -38118,7 +38601,10 @@
 1505745348,1505747199,GB
 1505747200,1505747455,RU
 1505747456,1505747711,GB
-1505747712,1505755135,RU
+1505747712,1505749503,RU
+1505749504,1505750015,RO
+1505750016,1505751039,BG
+1505751040,1505755135,RU
 1505755136,1506017279,GB
 1506017280,1506082815,IR
 1506082816,1506148351,GB
@@ -38132,6 +38618,8 @@
 1506328576,1506330623,FI
 1506330624,1506332671,NL
 1506332672,1506334719,PL
+1506334720,1506335743,TR
+1506335744,1506336767,CH
 1506336768,1506338815,PL
 1506338816,1506340863,UA
 1506340864,1506342911,RO
@@ -38187,7 +38675,9 @@
 1506458360,1506458367,CH
 1506458368,1506459763,GB
 1506459764,1506459767,FR
-1506459768,1506459968,GB
+1506459768,1506459781,GB
+1506459782,1506459782,FR
+1506459783,1506459968,GB
 1506459969,1506459969,FR
 1506459970,1506460151,GB
 1506460152,1506460159,FR
@@ -38699,7 +39189,9 @@
 1518708839,1518709552,LV
 1518709553,1518709553,LT
 1518709554,1518723071,LV
-1518723072,1518731263,SE
+1518723072,1518731103,SE
+1518731104,1518731135,HR
+1518731136,1518731263,SE
 1518731264,1518755839,LT
 1518755840,1518759935,SE
 1518759936,1518780415,LT
@@ -38818,7 +39310,10 @@
 1532661760,1532665855,DE
 1532665856,1532674047,PL
 1532674048,1532675071,NL
-1532675072,1532680191,UA
+1532675072,1532676095,UA
+1532676096,1532678143,MD
+1532678144,1532679167,UA
+1532679168,1532680191,RU
 1532680192,1532681215,UZ
 1532681216,1532681471,UA
 1532681472,1532681727,RU
@@ -38835,7 +39330,9 @@
 1532782848,1532784639,BG
 1532784640,1532785151,NL
 1532785152,1532785407,IR
-1532785408,1532786943,BG
+1532785408,1532785663,BG
+1532785664,1532786687,DE
+1532786688,1532786943,BG
 1532786944,1532788735,IR
 1532788736,1532788991,BG
 1532788992,1532790783,IR
@@ -38855,7 +39352,8 @@
 1532806144,1532806399,GB
 1532806400,1532808191,BG
 1532808192,1532811263,IR
-1532811264,1532812031,BG
+1532811264,1532811775,BG
+1532811776,1532812031,DE
 1532812032,1532812287,RO
 1532812288,1532813311,IR
 1532813312,1532814335,BG
@@ -38986,17 +39484,15 @@
 1533805568,1533807615,NL
 1533807616,1533808639,US
 1533808640,1533812735,RU
-1533812736,1533812991,GB
-1533812992,1533813247,AG
-1533813248,1533813759,GB
+1533812736,1533813759,GB
 1533813760,1533814271,TR
 1533814272,1533814783,ID
 1533814784,1533815039,AG
 1533815040,1533815295,GB
 1533815296,1533815551,RU
 1533815552,1533815807,GB
-1533815808,1533816831,RU
-1533816832,1533818879,GB
+1533815808,1533817855,RU
+1533817856,1533818879,GB
 1533818880,1533819903,NL
 1533819904,1533820927,RU
 1533820928,1533829119,DE
@@ -39097,9 +39593,7 @@
 1534714752,1534714767,DE
 1534714768,1534714871,FR
 1534714872,1534714875,ES
-1534714876,1534714975,FR
-1534714976,1534714991,GB
-1534714992,1534715207,FR
+1534714876,1534715207,FR
 1534715208,1534715211,GB
 1534715212,1534715215,FR
 1534715216,1534715231,GB
@@ -39259,7 +39753,8 @@
 1535512304,1535512319,NL
 1535512320,1535512779,FR
 1535512780,1535512783,PL
-1535512784,1535512799,FR
+1535512784,1535512787,NL
+1535512788,1535512799,FR
 1535512800,1535512831,DE
 1535512832,1535514767,FR
 1535514768,1535514783,LT
@@ -39327,8 +39822,8 @@
 1535547488,1535548091,FR
 1535548092,1535548095,PL
 1535548096,1535548159,IT
-1535548160,1535548223,FR
-1535548224,1535548415,ES
+1535548160,1535548287,FR
+1535548288,1535548415,ES
 1535548416,1535548463,FR
 1535548464,1535548479,LT
 1535548480,1535548991,FR
@@ -39546,11 +40041,7 @@
 1535836160,1535868927,CZ
 1535868928,1535901695,BG
 1535901696,1535934463,GR
-1535934464,1535966337,KW
-1535966338,1535966338,SA
-1535966339,1535966343,KW
-1535966344,1535966344,SA
-1535966345,1535967231,KW
+1535934464,1535967231,KW
 1535967232,1535999999,AT
 1536000000,1536032767,NL
 1536032768,1536036863,LV
@@ -39766,7 +40257,7 @@
 1539301376,1539309567,RU
 1539309568,1539310591,PL
 1539310592,1539311615,IQ
-1539311616,1539312639,RU
+1539311616,1539312639,GB
 1539312640,1539313663,DE
 1539313664,1539314687,GB
 1539314688,1539315711,RU
@@ -39783,9 +40274,7 @@
 1539325952,1539326975,KG
 1539326976,1539329023,RU
 1539329024,1539330047,PL
-1539330048,1539330303,RU
-1539330304,1539330559,DE
-1539330560,1539331071,RU
+1539330048,1539331071,RU
 1539331072,1539332095,NL
 1539332096,1539333119,PL
 1539333120,1539335167,RU
@@ -40104,6 +40593,7 @@
 1539572736,1539573759,RU
 1539573760,1539575807,PL
 1539575808,1539576831,IT
+1539576832,1539577855,AT
 1539577856,1539578879,NL
 1539578880,1539579903,GB
 1539579904,1539580927,RU
@@ -40159,7 +40649,7 @@
 1539643392,1539644415,UA
 1539644416,1539645439,DE
 1539645440,1539646463,GB
-1539646464,1539647487,RO
+1539646464,1539647487,US
 1539647488,1539648511,TR
 1539648512,1539649023,CY
 1539649024,1539649535,LB
@@ -40204,6 +40694,7 @@
 1539692544,1539694591,UA
 1539694592,1539695615,PL
 1539695616,1539696639,GB
+1539696640,1539697663,IE
 1539697664,1539698687,UA
 1539698688,1539699711,ES
 1539699712,1539700735,RO
@@ -40324,7 +40815,7 @@
 1539736064,1539736319,RU
 1539736320,1539736575,HU
 1539736576,1539736831,BG
-1539736832,1539737087,UA
+1539736832,1539737087,GI
 1539737088,1539737343,KW
 1539737344,1539737599,SE
 1539737600,1539737855,RO
@@ -40673,7 +41164,7 @@
 1539875840,1539876863,RU
 1539876864,1539877887,ES
 1539877888,1539878911,PL
-1539878912,1539879935,RU
+1539878912,1539879935,GB
 1539879936,1539880959,UA
 1539880960,1539881983,PL
 1539881984,1539883007,NL
@@ -40692,7 +41183,9 @@
 1539896320,1539897343,ES
 1539897344,1539898367,UA
 1539898368,1539899391,LT
-1539899392,1539902463,RU
+1539899392,1539900415,RU
+1539900416,1539901439,GB
+1539901440,1539902463,RU
 1539902464,1539903487,LV
 1539903488,1539904511,PL
 1539904512,1539905535,CZ
@@ -40952,9 +41445,7 @@
 1540199424,1540200447,CH
 1540200448,1540201471,IL
 1540201472,1540202495,UA
-1540202496,1540203519,RU
-1540203520,1540204543,UA
-1540204544,1540205567,RU
+1540202496,1540205567,RU
 1540205568,1540206591,DE
 1540206592,1540208639,RU
 1540208640,1540209663,NO
@@ -41118,8 +41609,7 @@
 1540316160,1540316671,DE
 1540317696,1540318719,RU
 1540318720,1540319231,RO
-1540319232,1540319743,UA
-1540319744,1540320255,RU
+1540319232,1540320255,UA
 1540320768,1540321279,GB
 1540321280,1540321791,SE
 1540321792,1540322303,RU
@@ -41625,8 +42115,8 @@
 1540515840,1540516863,RU
 1540516864,1540517887,UA
 1540517888,1540518911,RU
-1540518912,1540519935,UA
-1540519936,1540521983,RU
+1540518912,1540520959,UA
+1540520960,1540521983,RU
 1540521984,1540523007,PL
 1540523008,1540524031,RU
 1540524032,1540525055,AL
@@ -42012,7 +42502,7 @@
 1540716288,1540716543,UA
 1540717056,1540717311,CZ
 1540717312,1540717823,PL
-1540717824,1540718335,RU
+1540717824,1540718079,RU
 1540718336,1540718591,NO
 1540718592,1540718847,CH
 1540718848,1540719103,IT
@@ -43475,7 +43965,9 @@
 1541474304,1541475327,PL
 1541475328,1541476351,RO
 1541476352,1541477375,GB
-1541477376,1541479423,RU
+1541477376,1541478911,RU
+1541478912,1541479167,KZ
+1541479168,1541479423,RU
 1541479424,1541480447,PL
 1541480448,1541480959,US
 1541480960,1541481471,RO
@@ -43734,8 +44226,7 @@
 1541671424,1541671679,RU
 1541671680,1541671935,PL
 1541671936,1541672959,TR
-1541672960,1541674495,RS
-1541674496,1541675007,KG
+1541672960,1541675007,RS
 1541675008,1541675519,IE
 1541675520,1541676031,RU
 1541676032,1541676287,PL
@@ -43882,7 +44373,6 @@
 1541758976,1541760255,RU
 1541760256,1541760511,UA
 1541760512,1541761023,CH
-1541761024,1541761535,KG
 1541761536,1541762047,PL
 1541762048,1541763583,RU
 1541763584,1541763839,SE
@@ -44311,12 +44801,12 @@
 1542005248,1542005503,PL
 1542005504,1542005759,DE
 1542005760,1542006271,HR
-1542006272,1542008831,RU
+1542006784,1542008831,RU
 1542008832,1542009343,UA
 1542009344,1542009599,SE
 1542009600,1542009855,FR
 1542009856,1542010367,NL
-1542010368,1542010879,RU
+1542010624,1542010879,RU
 1542010880,1542011903,IR
 1542011904,1542012159,PL
 1542012160,1542012415,RU
@@ -44417,7 +44907,6 @@
 1542074624,1542074879,PL
 1542074880,1542075391,NL
 1542075392,1542075647,CH
-1542075904,1542076159,IE
 1542076160,1542076415,DE
 1542076416,1542077439,RO
 1542077440,1542078975,RU
@@ -45027,7 +45516,8 @@
 1542437376,1542437631,NL
 1542437632,1542437887,UA
 1542437888,1542438399,SE
-1542438400,1542438911,RU
+1542438400,1542438655,SC
+1542438656,1542438911,RU
 1542438912,1542439167,KZ
 1542439168,1542439423,SI
 1542439424,1542439679,RO
@@ -45080,7 +45570,7 @@
 1542464512,1542464767,RU
 1542464768,1542465023,TR
 1542465024,1542465535,RU
-1542465536,1542466559,XK
+1542465536,1542466559,RS
 1542466560,1542466815,PL
 1542466816,1542467071,RU
 1542467072,1542467583,PL
@@ -45153,7 +45643,7 @@
 1542506496,1542507007,NL
 1542507008,1542507519,RU
 1542507520,1542508543,NO
-1542508544,1542510079,RU
+1542508544,1542510591,RU
 1542510592,1542510847,SI
 1542510848,1542511103,DE
 1542511104,1542511871,RU
@@ -45174,7 +45664,7 @@
 1542516992,1542517247,FR
 1542517248,1542517759,RU
 1542517760,1542518015,UA
-1542518016,1542518271,SK
+1542518016,1542518271,PA
 1542518272,1542518783,LV
 1542518784,1542519807,PL
 1542519808,1542520319,SE
@@ -45286,7 +45776,9 @@
 1542683392,1542683647,RS
 1542683648,1542684159,RU
 1542684160,1542684671,IR
-1542684672,1542685695,LT
+1542684672,1542684927,LT
+1542684928,1542685183,RU
+1542685184,1542685695,LT
 1542685696,1542685951,RU
 1542685952,1542686719,LT
 1542686720,1542687743,US
@@ -45483,11 +45975,13 @@
 1546036224,1546037247,KR
 1546037248,1546038271,US
 1546038272,1546038783,LU
-1546038784,1546040319,RU
+1546038784,1546039807,RU
+1546039808,1546040063,JP
+1546040064,1546040319,RU
 1546040320,1546040831,TR
-1546040832,1546041343,RU
-1546041344,1546041855,NL
-1546041856,1546059775,RU
+1546040832,1546041343,SG
+1546041344,1546042367,NL
+1546042368,1546059775,RU
 1546059776,1546063871,SE
 1546063872,1546067967,DE
 1546067968,1546072063,SE
@@ -45803,10 +46297,10 @@
 1550979072,1550983167,IR
 1550983168,1550983935,RO
 1550983936,1550984191,GB
-1550984192,1550984447,KR
-1550984448,1550984703,RO
-1550984704,1550984959,BG
-1550984960,1550985215,RO
+1550984192,1550984228,KR
+1550984229,1550984229,ES
+1550984230,1550984447,KR
+1550984448,1550985215,RO
 1550985216,1550987263,PS
 1550987264,1550988287,IR
 1550988288,1550988543,RO
@@ -45816,8 +46310,7 @@
 1550989312,1550990335,ES
 1550990336,1550991359,AU
 1550991360,1550995455,IR
-1550995456,1550995967,RO
-1550995968,1550996223,BG
+1550995456,1550996223,RO
 1550996224,1550996479,AU
 1550996480,1550998527,RO
 1550998528,1550998783,IT
@@ -45918,7 +46411,9 @@
 1558103160,1558103167,GB
 1558103168,1558103967,FR
 1558103968,1558103999,ES
-1558104000,1558106901,FR
+1558104000,1558104815,FR
+1558104816,1558104831,DE
+1558104832,1558106901,FR
 1558106902,1558106902,DE
 1558106903,1558107391,FR
 1558107392,1558107455,NL
@@ -45948,8 +46443,7 @@
 1558126592,1558128639,RU
 1558128640,1558128895,US
 1558128896,1558129151,LU
-1558129152,1558129407,RU
-1558129408,1558129663,LU
+1558129152,1558129663,RU
 1558129664,1558130687,US
 1558130688,1558132735,LU
 1558132736,1558133247,US
@@ -45978,7 +46472,7 @@
 1558141184,1558141184,CY
 1558141185,1558141439,LU
 1558141440,1558141695,CY
-1558141696,1558141951,LU
+1558141696,1558141951,RU
 1558141952,1558142463,PL
 1558142464,1558142719,US
 1558142720,1558142975,SG
@@ -46124,7 +46618,9 @@
 1560117248,1560125439,CZ
 1560125440,1560133631,RU
 1560133632,1560136703,IR
-1560136704,1560138239,GB
+1560136704,1560138138,GB
+1560138139,1560138139,RU
+1560138140,1560138239,GB
 1560138240,1560140799,RU
 1560140800,1560141823,CZ
 1560141824,1560143871,SY
@@ -46139,17 +46635,15 @@
 1565224192,1565224959,BG
 1565224960,1565227007,UA
 1565227008,1565229055,BG
-1565229056,1565294591,UA
-1565294592,1565302783,US
-1565302784,1565368319,UA
-1565368320,1565376511,RU
-1565376512,1565523967,UA
+1565229056,1565523967,UA
 1565523968,1565655039,RU
 1565655040,1565786111,AT
 1565786112,1565917183,BY
 1565917184,1565974527,RS
 1565974528,1565975551,XK
-1565975552,1566048255,RS
+1565975552,1565992464,RS
+1565992465,1565992465,AL
+1565992466,1566048255,RS
 1566048256,1566052351,RU
 1566056448,1566060543,IT
 1566060544,1566064639,UA
@@ -46414,7 +46908,7 @@
 1567696384,1567696639,FR
 1567696640,1567696895,ES
 1567696896,1567697919,RO
-1567697920,1567698175,PL
+1567697920,1567698175,US
 1567698176,1567698431,SE
 1567698432,1567698687,IT
 1567698688,1567698943,RO
@@ -46440,7 +46934,7 @@
 1567718400,1567719167,RO
 1567719168,1567719423,GB
 1567719424,1567719935,RO
-1567719936,1567720191,PL
+1567719936,1567720191,US
 1567720192,1567720447,NO
 1567720448,1567721471,RO
 1567721472,1567723519,ES
@@ -46471,7 +46965,8 @@
 1567766272,1567767039,RO
 1567767040,1567767551,GB
 1567767552,1567768575,ES
-1567768576,1567769343,RO
+1567768576,1567769087,NL
+1567769088,1567769343,RO
 1567769344,1567769599,NL
 1567769600,1567769855,RO
 1567769856,1567770111,GB
@@ -46486,7 +46981,9 @@
 1567785472,1567785727,TR
 1567785728,1567785983,ES
 1567785984,1567786239,FR
-1567786240,1567789055,RO
+1567786240,1567786495,RO
+1567786496,1567787007,NL
+1567787008,1567789055,RO
 1567789056,1567793151,ES
 1567793152,1567795455,RO
 1567795456,1567795711,GB
@@ -46560,9 +47057,7 @@
 1567870976,1567871999,RO
 1567872000,1567873023,ES
 1567873024,1567879167,IR
-1567879168,1567880191,RO
-1567880192,1567880703,BG
-1567880704,1567883263,RO
+1567879168,1567883263,RO
 1567883264,1567948799,MD
 1567948800,1567961087,IR
 1567961088,1567965183,MD
@@ -46618,7 +47113,8 @@
 1568112640,1568114687,MD
 1568114688,1568115711,RO
 1568115712,1568118783,MD
-1568118784,1568119807,RO
+1568118784,1568119551,RO
+1568119552,1568119807,NL
 1568119808,1568120831,ES
 1568120832,1568122879,MD
 1568122880,1568129535,RO
@@ -46635,7 +47131,9 @@
 1568243712,1568276479,GP
 1568276480,1568309247,DE
 1568309248,1568342015,RO
-1568342016,1568368639,BG
+1568342016,1568360447,BG
+1568360448,1568360703,DE
+1568360704,1568368639,BG
 1568368640,1568369663,DE
 1568369664,1568374783,BG
 1568374784,1568440319,RU
@@ -46675,14 +47173,16 @@
 1570586624,1570590719,PL
 1570590720,1570592767,IL
 1570592768,1570596863,PL
-1570596864,1570598911,RU
+1570596864,1570597887,RU
+1570597888,1570598911,GB
 1570598912,1570600959,PL
 1570600960,1570603007,RU
 1570603008,1570605055,CZ
 1570605056,1570607103,NL
 1570607104,1570609151,RU
 1570609152,1570611199,PL
-1570611200,1570618367,RU
+1570611200,1570617343,RU
+1570617344,1570618367,GB
 1570618368,1570619391,TR
 1570619392,1570621439,BA
 1570621440,1570621951,DE
@@ -46805,10 +47305,9 @@
 1571470848,1571475455,RU
 1571475456,1571476479,UZ
 1571476480,1571477503,RU
-1571477504,1571477506,CZ
+1571477504,1571477506,UA
 1571477507,1571477507,RU
-1571477508,1571477759,CZ
-1571477760,1571478015,UA
+1571477508,1571478015,UA
 1571478016,1571478271,RU
 1571478272,1571478527,UA
 1571478528,1571479551,RU
@@ -46840,8 +47339,7 @@
 1571526656,1571526911,UA
 1571526912,1571527167,KZ
 1571527168,1571527423,UA
-1571527424,1571527679,SK
-1571527680,1571528191,RU
+1571527424,1571528191,RU
 1571528192,1571528703,UA
 1571528704,1571529215,BY
 1571529216,1571529471,CZ
@@ -46984,8 +47482,6 @@
 1572098048,1572100095,DK
 1572100096,1572102143,CH
 1572102144,1572110335,BA
-1572110336,1572110591,US
-1572110592,1572112383,GB
 1572112384,1572114431,RU
 1572114432,1572116479,BA
 1572116480,1572118527,DE
@@ -47395,7 +47891,9 @@
 1578609828,1578610687,DE
 1578610688,1578610695,FR
 1578610696,1578610703,ES
-1578610704,1578611039,FR
+1578610704,1578610779,FR
+1578610780,1578610783,DE
+1578610784,1578611039,FR
 1578611040,1578611043,ES
 1578611044,1578611075,FR
 1578611076,1578611079,HR
@@ -47579,7 +48077,9 @@
 1581252608,1581776895,GR
 1581776896,1581793279,RU
 1581793280,1581809663,PL
-1581809664,1581826047,BG
+1581809664,1581815807,BG
+1581815808,1581816831,LB
+1581816832,1581826047,BG
 1581826048,1581842431,GB
 1581842432,1581850623,PS
 1581850624,1581858815,ES
@@ -47739,7 +48239,7 @@
 1585209344,1585210367,CR
 1585210368,1585211391,DE
 1585211392,1585213439,CZ
-1585213440,1585214463,RU
+1585213440,1585214463,GB
 1585214464,1585215487,NO
 1585215488,1585217535,NL
 1585217536,1585219583,FR
@@ -47785,7 +48285,7 @@
 1585266688,1585270783,DE
 1585270784,1585272831,IT
 1585272832,1585274879,RU
-1585274880,1585275903,KZ
+1585274880,1585275903,CZ
 1585275904,1585276927,DE
 1585276928,1585278975,FR
 1585278976,1585281023,AL
@@ -47934,7 +48434,7 @@
 1586393616,1586393631,FR
 1586393632,1586393663,NL
 1586393664,1586397183,ES
-1586397184,1586398207,RU
+1586397184,1586398207,GB
 1586398208,1586399231,NL
 1586399232,1586401279,RU
 1586401280,1586403327,IT
@@ -48004,7 +48504,15 @@
 1587175424,1587177471,PL
 1587177472,1587179519,RS
 1587200000,1587216383,UA
-1587216384,1587322367,BG
+1587216384,1587305471,BG
+1587305472,1587305727,DE
+1587305728,1587307263,BG
+1587307264,1587307519,DE
+1587307520,1587309055,BG
+1587309056,1587309311,DE
+1587309312,1587315711,BG
+1587315712,1587315967,DE
+1587315968,1587322367,BG
 1587322368,1587322623,RS
 1587322624,1587347455,BG
 1587347456,1587412991,NL
@@ -48040,7 +48548,7 @@
 1588619776,1588620031,SG
 1588620032,1588620287,ES
 1588620288,1588620543,RO
-1588620544,1588620799,PL
+1588620544,1588620799,US
 1588620800,1588621311,RO
 1588621312,1588625407,MD
 1588625408,1588626175,RO
@@ -48056,15 +48564,16 @@
 1588640768,1588641279,LT
 1588641280,1588641535,RO
 1588641536,1588641791,GB
-1588641792,1588642303,CH
+1588641792,1588642303,BG
 1588642304,1588642559,DE
 1588642560,1588642815,NL
 1588642816,1588643071,RO
 1588643072,1588643327,NL
-1588643328,1588643839,DE
+1588643328,1588643839,UA
 1588643840,1588645887,RO
 1588645888,1588646399,GB
-1588646400,1588649983,RO
+1588646400,1588646911,NL
+1588646912,1588649983,RO
 1588649984,1588652031,SE
 1588652032,1588652159,NL
 1588652160,1588654079,LT
@@ -48090,7 +48599,7 @@
 1588674560,1588674815,RO
 1588674816,1588675071,GB
 1588675072,1588675327,RO
-1588675328,1588675583,PL
+1588675328,1588675583,US
 1588675584,1588676607,IT
 1588676608,1588678655,IR
 1588678656,1588680703,RO
@@ -48149,8 +48658,7 @@
 1589477376,1589510143,RS
 1589510144,1589542911,RU
 1589542912,1589547007,BG
-1589547008,1589547263,CA
-1589547264,1589551103,EE
+1589547008,1589551103,EE
 1589551104,1589560319,BG
 1589560320,1589561343,GI
 1589561344,1589563391,NL
@@ -48383,8 +48891,8 @@
 1593134592,1593135103,SE
 1593135104,1593135359,GB
 1593135360,1593135615,IE
-1593135616,1593136895,GB
-1593136896,1593139199,IE
+1593135616,1593137151,GB
+1593137152,1593139199,IE
 1593139200,1593140223,NL
 1593140224,1593147391,IE
 1593147392,1593163775,RU
@@ -48392,13 +48900,7 @@
 1593180160,1593196543,NO
 1593196544,1593203103,SE
 1593203104,1593203135,FI
-1593203136,1593203723,SE
-1593203724,1593203727,NO
-1593203728,1593203743,SE
-1593203744,1593203747,NO
-1593203748,1593205599,SE
-1593205600,1593205607,NO
-1593205608,1593206783,SE
+1593203136,1593206783,SE
 1593206784,1593207039,FI
 1593207040,1593212927,SE
 1593212928,1593229311,PL
@@ -48425,7 +48927,7 @@
 1593274368,1593276415,DE
 1593276416,1593278463,RU
 1593278464,1593280511,KZ
-1593280512,1593282559,RU
+1593280512,1593282559,GB
 1593282560,1593284607,AT
 1593284608,1593286655,GB
 1593286656,1593288703,FR
@@ -48468,7 +48970,6 @@
 1593475072,1593491455,HR
 1593491456,1593499647,DE
 1593499648,1593503743,GB
-1593503744,1593505791,CZ
 1593505792,1593540607,RU
 1593540608,1593573375,PL
 1593573376,1593606143,LU
@@ -48581,8 +49082,7 @@
 1596948480,1596950527,BY
 1596950528,1596951551,UA
 1596951552,1596951807,RU
-1596951808,1596952063,NL
-1596952064,1596952831,UA
+1596951808,1596952831,UA
 1596952832,1596953087,RU
 1596953088,1596953599,CZ
 1596953600,1596954623,UA
@@ -48782,7 +49282,7 @@
 1602349056,1602351103,RU
 1602351104,1602353151,CZ
 1602353152,1602355199,ES
-1602355200,1602356223,RU
+1602355200,1602356223,GB
 1602356224,1602357247,PL
 1602357248,1602359295,FR
 1602359296,1602361343,DE
@@ -48810,7 +49310,7 @@
 1602406400,1602408447,DE
 1602408448,1602410495,DK
 1602410496,1602412543,NO
-1602412544,1602414591,RU
+1602412544,1602414591,GB
 1602414592,1602416639,NL
 1602416640,1602418687,IR
 1602418688,1602420735,DE
@@ -48874,19 +49374,19 @@
 1603067904,1603071999,GB
 1603072000,1603076095,CZ
 1603076096,1603080191,RU
-1603080192,1603080703,IN
+1603080192,1603080703,KE
 1603080704,1603080831,US
 1603080832,1603080959,SE
 1603080960,1603081087,DE
-1603081088,1603081215,IN
+1603081088,1603081215,KE
 1603081216,1603081247,GB
 1603081248,1603081255,NO
 1603081256,1603081263,FI
 1603081264,1603081279,GB
 1603081280,1603081295,US
-1603081296,1603081407,IN
+1603081296,1603081407,KE
 1603081408,1603081471,ES
-1603081472,1603082239,IN
+1603081472,1603082239,KE
 1603082240,1603082495,DE
 1603082496,1603082751,GT
 1603082752,1603083007,ES
@@ -48902,7 +49402,7 @@
 1603083584,1603083615,DE
 1603083616,1603083647,LU
 1603083648,1603083775,DE
-1603083776,1603084031,IN
+1603083776,1603084031,KE
 1603084032,1603088383,IT
 1603088384,1603092479,LB
 1603092480,1603100671,NO
@@ -49025,23 +49525,8 @@
 1604853760,1604870143,HU
 1604870144,1604878335,HR
 1604878336,1604886527,DE
-1604886528,1604886783,NL
-1604886784,1604887039,DE
-1604887040,1604887295,NL
-1604887296,1604888063,DE
-1604888064,1604888831,NL
-1604888832,1604889599,TR
-1604889600,1604890111,DE
-1604890112,1604890367,NL
-1604890368,1604890879,TR
-1604890880,1604891967,DE
-1604891968,1604892159,NL
-1604892160,1604892927,DE
-1604892928,1604893183,HK
-1604893184,1604893375,NL
-1604893376,1604893951,DE
-1604893952,1604894463,TR
-1604894464,1604894719,DE
+1604886528,1604890623,NL
+1604890624,1604894719,GB
 1604894720,1604902031,CZ
 1604902032,1604902039,SK
 1604902040,1604902911,CZ
@@ -49311,9 +49796,7 @@
 1607986688,1607988223,RU
 1607988224,1607989247,KG
 1607989248,1607991295,RU
-1607991296,1608012415,FI
-1608012416,1608012423,DE
-1608012424,1608122367,FI
+1607991296,1608122367,FI
 1608122368,1608253439,SA
 1608253440,1608384511,RU
 1608384512,1608515583,DE
@@ -49416,9 +49899,9 @@
 1652293632,1652310015,CA
 1652310016,1652481279,US
 1652481280,1652481791,CN
-1652481792,1652647319,US
-1652647320,1652647327,IL
-1652647328,1652649543,US
+1652481792,1652555775,US
+1652555776,1652621311,SE
+1652621312,1652649543,US
 1652649544,1652649551,CA
 1652649552,1652655487,US
 1652655488,1652655503,IN
@@ -49531,7 +50014,7 @@
 1697997824,1697998847,CN
 1697998848,1698004991,JP
 1698004992,1698013183,IN
-1698013184,1698021375,US
+1698013184,1698021375,SG
 1698021376,1698029567,NZ
 1698029568,1698037759,PK
 1698037760,1698103295,CN
@@ -49578,7 +50061,6 @@
 1701093376,1701117951,SG
 1701117952,1701134335,NC
 1701134336,1701142527,CN
-1701142528,1701143551,HK
 1701143552,1701143807,CN
 1701143808,1701144063,TW
 1701144064,1701150719,CN
@@ -49642,23 +50124,44 @@
 1710972672,1710972927,TW
 1710972928,1711210495,CN
 1711210496,1711276031,ID
+1717567488,1718091775,MA
 1718616064,1719140351,MU
-1720057856,1720123391,ZA
-1720123392,1720156159,SC
-1720156160,1720164351,ZA
+1719140352,1719664639,SD
+1719894016,1719926783,NG
+1719926784,1719992319,ZA
+1720057856,1720077311,ZA
+1720077312,1720078335,MU
+1720080384,1720082431,ZA
+1720082432,1720086527,BI
+1720086528,1720090623,ZA
+1720091648,1720092671,ZA
+1720092672,1720093695,BW
+1720096768,1720098815,ZA
+1720098816,1720102911,BW
+1720102912,1720123391,ZA
+1720123392,1720127487,TZ
+1720127488,1720143871,SC
+1720143872,1720147967,KE
+1720147968,1720164351,ZA
 1720166400,1720168447,KE
+1720168448,1720170495,CG
+1720172032,1720172287,ZA
 1720172544,1720180735,NG
 1720180736,1720184831,RE
 1720184832,1720186879,ZA
 1720186880,1720187903,MA
 1720188928,1720451071,CI
-1720451072,1720475647,ZA
+1720451072,1720459263,ZA
+1720459264,1720463359,NG
+1720463360,1720475647,ZA
 1720475648,1720477695,NG
+1720477696,1720478719,ZA
 1720481792,1720483839,ZM
 1720483840,1720492031,GM
 1720492032,1720496127,ZA
 1720496128,1720500223,MU
 1720500224,1720516607,KE
+1720516608,1720532991,CG
 1720532992,1720545279,ZA
 1720545280,1720547327,BW
 1720547328,1720566783,ZA
@@ -49668,6 +50171,7 @@
 1720572928,1720573951,LR
 1720573952,1720574975,ZA
 1720574976,1720575999,GH
+1720576000,1720576255,ZA
 1720576256,1720576767,NG
 1720576768,1720577023,ZA
 1720577024,1720578047,SC
@@ -49789,7 +50293,6 @@
 1728155648,1728157695,MY
 1728157696,1728158463,HK
 1728158464,1728158719,NL
-1728158720,1728159743,HK
 1728159744,1728161791,TH
 1728161792,1728162815,CN
 1728162816,1728163839,SG
@@ -50036,7 +50539,8 @@
 1728458752,1728459775,HK
 1728459776,1728460799,ID
 1728460800,1728462847,JP
-1728462848,1728463871,US
+1728462848,1728463359,NZ
+1728463360,1728463871,US
 1728463872,1728464895,JP
 1728464896,1728465919,KR
 1728465920,1728466943,CN
@@ -50262,7 +50766,6 @@
 1728674816,1728675839,ID
 1728675840,1728676863,KR
 1728676864,1728678911,BD
-1728678912,1728679935,PG
 1728679936,1728680959,ID
 1728680960,1728681983,MY
 1728681984,1728683007,CN
@@ -50527,9 +51030,7 @@
 1728918528,1728919551,KR
 1728919552,1728920575,AU
 1728920576,1728921599,JP
-1728921600,1728922100,AF
-1728922101,1728922101,DE
-1728922102,1728922623,AF
+1728921600,1728922623,AF
 1728922624,1728923647,AU
 1728923648,1728924159,HK
 1728924160,1728924671,MY
@@ -51160,7 +51661,8 @@
 1729548288,1729549311,AU
 1729549312,1729550335,TW
 1729551360,1729552383,KR
-1729552384,1729553407,AU
+1729552384,1729553151,AU
+1729553152,1729553407,JP
 1729553408,1729554431,CN
 1729554432,1729554943,ID
 1729554944,1729555455,NZ
@@ -51263,7 +51765,6 @@
 1729640448,1729641471,ID
 1729641472,1729642495,IN
 1729642496,1729643519,AU
-1729643520,1729644543,JP
 1729644544,1729645823,ID
 1729645824,1729646079,SG
 1729646592,1729648639,IN
@@ -51349,7 +51850,6 @@
 1729734656,1729736703,IN
 1729736704,1729737727,PH
 1729737728,1729738751,AU
-1729738752,1729739775,BD
 1729739776,1729740799,NZ
 1729740800,1729742335,ID
 1729742336,1729742847,PH
@@ -51364,7 +51864,7 @@
 1729750016,1729750527,VU
 1729750528,1729751039,IN
 1729751040,1729753087,TW
-1729753088,1729754111,TH
+1729753088,1729754111,MM
 1729754112,1729755135,NZ
 1729755136,1729756159,BD
 1729756160,1729757183,HK
@@ -51401,7 +51901,7 @@
 1729789952,1729790975,ID
 1729790976,1729791999,CN
 1729792000,1729793023,BD
-1729793024,1729794047,IN
+1729793024,1729794047,CA
 1729794048,1729795071,HK
 1729795072,1729796095,MY
 1729796096,1729797119,JP
@@ -51410,7 +51910,6 @@
 1729800192,1729800703,IN
 1729800704,1729801215,MY
 1729801216,1729802239,AU
-1729802240,1729803263,MY
 1729803264,1729804287,TH
 1729804288,1729805311,PK
 1729806336,1729807359,MN
@@ -52084,7 +52583,6 @@
 1730778112,1730780159,CN
 1730780160,1730781183,AU
 1730781184,1730783231,CN
-1730783232,1730783487,IN
 1730783488,1730783