aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--ChangeLog63
-rw-r--r--Makefile.am16
-rw-r--r--changes/bug50408
-rw-r--r--changes/bug55844
-rw-r--r--changes/bug85303
-rw-r--r--changes/bug89294
-rw-r--r--changes/bug91224
-rw-r--r--changes/bug91474
-rw-r--r--changes/bug92005
-rw-r--r--changes/bug92544
-rw-r--r--changes/bug92586
-rw-r--r--changes/bug92674
-rw-r--r--changes/bug92884
-rw-r--r--changes/bug92954
-rw-r--r--changes/bug93096
-rw-r--r--changes/bug93374
-rw-r--r--changes/bug93545
-rw-r--r--changes/fancy_testing27
-rw-r--r--changes/geoip-august20133
-rw-r--r--changes/geoip-july20133
-rw-r--r--changes/seccomp2_sandbox12
-rw-r--r--changes/ticket51293
-rw-r--r--changes/ticket_92146
-rw-r--r--changes/v3_intro_len8
-rw-r--r--configure.ac20
-rwxr-xr-xcontrib/cov-blame48
-rwxr-xr-xcontrib/cov-diff17
-rwxr-xr-xcontrib/coverage46
-rw-r--r--doc/HACKING32
-rw-r--r--doc/tor.1.txt40
-rw-r--r--src/common/compat.c175
-rw-r--r--src/common/compat.h21
-rw-r--r--src/common/crypto.c10
-rw-r--r--src/common/crypto.h9
-rw-r--r--src/common/crypto_curve25519.c2
-rw-r--r--src/common/crypto_curve25519.h5
-rw-r--r--src/common/crypto_format.c1
-rw-r--r--src/common/include.am37
-rw-r--r--src/common/log.c20
-rw-r--r--src/common/sandbox.c331
-rw-r--r--src/common/sandbox.h55
-rw-r--r--src/common/testsupport.h80
-rw-r--r--src/common/torlog.h7
-rw-r--r--src/common/tortls.c3
-rw-r--r--src/common/util.c64
-rw-r--r--src/common/util.h39
-rw-r--r--src/config/geoip11018
-rw-r--r--src/config/geoip-manual21
-rw-r--r--src/ext/eventdns.c9
-rw-r--r--src/or/addressmap.c2
-rw-r--r--src/or/addressmap.h6
-rw-r--r--src/or/buffers.c61
-rw-r--r--src/or/buffers.h12
-rw-r--r--src/or/channel.c12
-rw-r--r--src/or/channel.h2
-rw-r--r--src/or/channeltls.c32
-rw-r--r--src/or/circuitlist.c15
-rw-r--r--src/or/circuitlist.h7
-rw-r--r--src/or/circuitmux.c13
-rw-r--r--src/or/circuitmux.h9
-rw-r--r--src/or/circuitstats.c21
-rw-r--r--src/or/circuitstats.h21
-rw-r--r--src/or/config.c231
-rw-r--r--src/or/config.h24
-rw-r--r--src/or/confparse.c16
-rw-r--r--src/or/confparse.h2
-rw-r--r--src/or/connection.c91
-rw-r--r--src/or/connection.h10
-rw-r--r--src/or/connection_edge.c4
-rw-r--r--src/or/connection_edge.h6
-rw-r--r--src/or/connection_or.c82
-rw-r--r--src/or/connection_or.h3
-rw-r--r--src/or/control.c59
-rw-r--r--src/or/control.h10
-rw-r--r--src/or/directory.c4
-rw-r--r--src/or/dirserv.c18
-rw-r--r--src/or/dirserv.h23
-rw-r--r--src/or/dirvote.c18
-rw-r--r--src/or/dirvote.h6
-rw-r--r--src/or/dns.c8
-rw-r--r--src/or/entrynodes.c17
-rw-r--r--src/or/ext_orport.c648
-rw-r--r--src/or/ext_orport.h42
-rw-r--r--src/or/geoip.c174
-rw-r--r--src/or/geoip.h12
-rw-r--r--src/or/hibernate.c2
-rw-r--r--src/or/hibernate.h2
-rw-r--r--src/or/include.am32
-rw-r--r--src/or/main.c65
-rw-r--r--src/or/main.h15
-rw-r--r--src/or/ntmain.c1
-rw-r--r--src/or/or.h77
-rw-r--r--src/or/relay.c44
-rw-r--r--src/or/relay.h8
-rw-r--r--src/or/rendservice.c12
-rw-r--r--src/or/rendservice.h2
-rw-r--r--src/or/replaycache.c27
-rw-r--r--src/or/replaycache.h10
-rw-r--r--src/or/router.c2
-rw-r--r--src/or/router.h4
-rw-r--r--src/or/routerlist.c4
-rw-r--r--src/or/routerlist.h9
-rw-r--r--src/or/statefile.c7
-rw-r--r--src/or/statefile.h6
-rw-r--r--src/or/transports.c165
-rw-r--r--src/or/transports.h22
-rw-r--r--src/test/bench.c1
-rw-r--r--src/test/include.am23
-rwxr-xr-xsrc/test/test-network.sh25
-rw-r--r--src/test/test.c813
-rw-r--r--src/test/test_buffers.c342
-rw-r--r--src/test/test_cell_queue.c146
-rw-r--r--src/test/test_circuitlist.c168
-rw-r--r--src/test/test_circuitmux.c84
-rw-r--r--src/test/test_config.c72
-rw-r--r--src/test/test_containers.c53
-rw-r--r--src/test/test_crypto.c3
-rw-r--r--src/test/test_extorport.c604
-rw-r--r--src/test/test_options.c170
-rw-r--r--src/test/test_pt.c269
-rw-r--r--src/test/test_replay.c192
-rw-r--r--src/test/test_socks.c393
-rw-r--r--src/test/test_util.c170
-rw-r--r--src/tools/tor-checkkey.c2
-rw-r--r--src/tools/tor-gencert.c2
126 files changed, 11607 insertions, 6488 deletions
diff --git a/.gitignore b/.gitignore
index e48918d32..201d04da6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -128,10 +128,13 @@
/src/common/Makefile.in
/src/common/common_sha1.i
/src/common/libor.a
+/src/common/libor-testing.a
/src/common/libor.lib
/src/common/libor-crypto.a
+/src/common/libor-crypto-testing.a
/src/common/libor-crypto.lib
/src/common/libor-event.a
+/src/common/libor-event-testing.a
/src/common/libor-event.lib
/src/common/libcurve25519_donna.a
/src/common/libcurve25519_donna.lib
@@ -149,7 +152,10 @@
/src/or/or_sha1.i
/src/or/tor
/src/or/tor.exe
+/src/or/tor-cov
+/src/or/tor-cov.exe
/src/or/libtor.a
+/src/or/libtor-testing.a
/src/or/libtor.lib
# /src/test
diff --git a/ChangeLog b/ChangeLog
index 157872829..9f6b18751 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,56 @@
+Changes in version 0.2.4.16-rc - 2013-08-10
+ Tor 0.2.4.16-rc is the second release candidate for the Tor 0.2.4.x
+ series. It fixes several crash bugs in the 0.2.4 branch.
+
+ o Major bugfixes:
+ - Fix a bug in the voting algorithm that could yield incorrect results
+ when a non-naming authority declared too many flags. Fixes bug 9200;
+ bugfix on 0.2.0.3-alpha.
+ - Fix an uninitialized read that could in some cases lead to a remote
+ crash while parsing INTRODUCE2 cells. Bugfix on 0.2.4.1-alpha.
+ Anybody running a hidden service on the experimental 0.2.4.x
+ branch should upgrade. (This is, so far as we know, unrelated to
+ the recent news.)
+ - Avoid an assertion failure when processing DNS replies without the
+ answer types we expected. Fixes bug 9337; bugfix on 0.2.4.7-alpha.
+ - Avoid a crash when using --hash-password. Fixes bug 9295; bugfix on
+ 0.2.4.15-rc. Found by stem integration tests.
+
+ o Minor bugfixes:
+ - Fix an invalid memory read that occured when a pluggable
+ transport proxy failed its configuration protocol.
+ Fixes bug 9288; bugfix on 0.2.4.1-alpha.
+ - When evaluating whether to use a connection that we haven't
+ decided is canonical using a recent link protocol version,
+ decide that it's canonical only if it used address _does_
+ match the desired address. Fixes bug 9309; bugfix on
+ 0.2.4.4-alpha. Reported by skruffy.
+ - Make the default behavior of NumDirectoryGuards be to track
+ NumEntryGuards. Now a user who changes only NumEntryGuards will get
+ the behavior she expects. Fixes bug 9354; bugfix on 0.2.4.8-alpha.
+ - Fix a spurious compilation warning with some older versions of
+ GCC on FreeBSD. Fixes bug 9254; bugfix on 0.2.4.14-alpha.
+
+ o Minor features:
+ - Update to the July 3 2013 Maxmind GeoLite Country database.
+
+
+Changes in version 0.2.4.15-rc - 2013-07-01
+ Tor 0.2.4.15-rc is the first release candidate for the Tor 0.2.4.x
+ series. It fixes a few smaller bugs, but generally appears stable.
+ Please test it and let us know whether it is!
+
+ o Major bugfixes:
+ - When receiving a new configuration file via the control port's
+ LOADCONF command, do not treat the defaults file as absent.
+ Fixes bug 9122; bugfix on 0.2.3.9-alpha.
+
+ o Minor features:
+ - Issue a warning when running with the bufferevents backend enabled.
+ It's still not stable, and people should know that they're likely
+ to hit unexpected problems. Closes ticket 9147.
+
+
Changes in version 0.2.4.14-alpha - 2013-06-18
Tor 0.2.4.14-alpha fixes a pair of client guard enumeration problems
present in 0.2.4.13-alpha.
@@ -80,11 +133,11 @@ Changes in version 0.2.4.13-alpha - 2013-06-14
- Relays now treat a changed IPv6 ORPort as sufficient reason to
publish an updated descriptor. Fixes bug 6026; bugfix on
0.2.4.1-alpha.
- - When launching a resolve request on behalf of an AF_UNIX control
- socket, omit the address field of the new entry connection, used in
- subsequent controller events, rather than letting tor_dup_addr()
- set it to "<unknown address type>". Fixes bug 8639; bugfix on
- 0.2.4.12-alpha.
+ - When launching a resolve request on behalf of an AF_UNIX control
+ socket, omit the address field of the new entry connection, used in
+ subsequent controller events, rather than letting tor_dup_addr()
+ set it to "<unknown address type>". Fixes bug 8639; bugfix on
+ 0.2.4.12-alpha.
o Minor bugfixes (log messages):
- Fix a scaling issue in the path bias accounting code that
diff --git a/Makefile.am b/Makefile.am
index 4639c22c4..0361d87ce 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -32,6 +32,12 @@ EXTRA_DIST+= \
README \
ReleaseNotes
+if COVERAGE_ENABLED
+TEST_CFLAGS=-fno-inline -fprofile-arcs -ftest-coverage
+else
+TEST_CFLAGS=
+endif
+
#install-data-local:
# $(INSTALL) -m 755 -d $(LOCALSTATEDIR)/lib/tor
@@ -60,6 +66,14 @@ doxygen:
test: all
./src/test/test
+# Note that test-network requires a copy of Chutney in $CHUTNEY_PATH.
+# Chutney can be cloned from https://git.torproject.org/chutney.git .
+test-network: all
+ ./src/test/test-network.sh
+
+reset-gcov:
+ rm -f src/*/*.gcda
+
# Avoid strlcpy.c, strlcat.c, aes.c, OpenBSD_malloc_Linux.c, sha256.c,
# eventdns.[hc], tinytest*.[ch]
check-spaces:
@@ -84,3 +98,5 @@ version:
(cd "$(top_srcdir)" && git rev-parse --short=16 HEAD); \
fi
+mostlyclean-local:
+ rm -f src/*/*.gc{da,no}
diff --git a/changes/bug5040 b/changes/bug5040
new file mode 100644
index 000000000..720665b4d
--- /dev/null
+++ b/changes/bug5040
@@ -0,0 +1,8 @@
+ o Minor features:
+ - Bridges now track GeoIP information and the number of their
+ users even when pluggable transports are in use. These
+ statistics are reported in their extra-info descriptors like
+ normal bridges do. Resolves ticket 4773.
+ - Bridges now track the usage of their pluggable transports and
+ report statistics in their extra-info descriptors. Resolves
+ ticket 5040.
diff --git a/changes/bug5584 b/changes/bug5584
new file mode 100644
index 000000000..a81be00ae
--- /dev/null
+++ b/changes/bug5584
@@ -0,0 +1,4 @@
+ o Minor features:
+ - Raise awareness of safer logging - notice user of potentially
+ unsafe configuration options: logging above "notice" or
+ clearning SafeLogging flag. Fixes #5584.
diff --git a/changes/bug8530 b/changes/bug8530
new file mode 100644
index 000000000..f66b602db
--- /dev/null
+++ b/changes/bug8530
@@ -0,0 +1,3 @@
+ o Enhancements
+ - Add make target 'test-network' running tests on a Chutney
+ network.
diff --git a/changes/bug8929 b/changes/bug8929
new file mode 100644
index 000000000..2a1898b8a
--- /dev/null
+++ b/changes/bug8929
@@ -0,0 +1,4 @@
+ o Minor features:
+ - Add a new torrc option "ServerTransportOptions" that allows
+ bridge operators to pass configuration parameters to their
+ pluggable transports. Resolves ticket 8929.
diff --git a/changes/bug9122 b/changes/bug9122
new file mode 100644
index 000000000..5009da612
--- /dev/null
+++ b/changes/bug9122
@@ -0,0 +1,4 @@
+ o Major bugfixes:
+ - When receiving a new configuration file via the control port's
+ LOADCONF command, do not treat the defaults file as absent.
+ Fixes bug 9122; bugfix on 0.2.3.9-alpha.
diff --git a/changes/bug9147 b/changes/bug9147
new file mode 100644
index 000000000..e6064ea0e
--- /dev/null
+++ b/changes/bug9147
@@ -0,0 +1,4 @@
+ o Minor features:
+ - Issue a warning when running with the bufferevents backend enabled.
+ It's still not stable, and people should know that they're likely
+ to hit unexpected problems. Closes ticket 9147.
diff --git a/changes/bug9200 b/changes/bug9200
new file mode 100644
index 000000000..7b64dd174
--- /dev/null
+++ b/changes/bug9200
@@ -0,0 +1,5 @@
+ o Major bugfixes:
+ - Fix a bug in the voting algorithm that could yield incorrect results
+ when a non-naming authority declared too many flags. Fixes bug 9200;
+ bugfix on 0.2.0.3-alpha.
+
diff --git a/changes/bug9254 b/changes/bug9254
new file mode 100644
index 000000000..5179bdc52
--- /dev/null
+++ b/changes/bug9254
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - Fix a spurious compilation warning with some older versions of
+ GCC on FreeBSD. Fixes bug 9254; bugfix on 0.2.4.14-alpha.
+
diff --git a/changes/bug9258 b/changes/bug9258
new file mode 100644
index 000000000..5165b3a67
--- /dev/null
+++ b/changes/bug9258
@@ -0,0 +1,6 @@
+ o Minor bugfixes:
+ - Reject relative control socket paths and emit a warning.
+ Previously single-component control socket paths would be rejected,
+ but Tor would not log why it could not validate the config.
+ Now we reject all relative control socket paths and print a warning.
+ Fixes bug 9047; bugfix on 0.2.2.6-alpha.
diff --git a/changes/bug9267 b/changes/bug9267
new file mode 100644
index 000000000..95a621148
--- /dev/null
+++ b/changes/bug9267
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - Added optional parameter to contrib/coverage script to specify directory
+ to put gcov files in, and added reset-gcov target to top-level makefile.
+ Fixes bug #9267.
diff --git a/changes/bug9288 b/changes/bug9288
new file mode 100644
index 000000000..59bf414ea
--- /dev/null
+++ b/changes/bug9288
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - Fix an invalid memory read that occured when a pluggable
+ transport proxy failed its configuration protocol.
+ Fixes bug 9288.
diff --git a/changes/bug9295 b/changes/bug9295
new file mode 100644
index 000000000..2c113616c
--- /dev/null
+++ b/changes/bug9295
@@ -0,0 +1,4 @@
+ o Major bugfixes:
+ - Avoid a crash when using --hash-password. Fixes bug 9295; bugfix on
+ 0.2.4.15-rc. Found by stem integration tests.
+
diff --git a/changes/bug9309 b/changes/bug9309
new file mode 100644
index 000000000..38c462bc0
--- /dev/null
+++ b/changes/bug9309
@@ -0,0 +1,6 @@
+ o Minor bugfixes:
+ - When evaluating whether to use a connection that we haven't
+ decided is canonical using a recent link protocol version,
+ decide that it's canonical only if it used address _does_
+ match the desired address. Fixes bug 9309; bugfix on
+ 0.2.4.4-alpha. Reported by skruffy.
diff --git a/changes/bug9337 b/changes/bug9337
new file mode 100644
index 000000000..ce99bc818
--- /dev/null
+++ b/changes/bug9337
@@ -0,0 +1,4 @@
+ o Major bugfixes (DNS):
+ - Avoid an assertion failure when processing DNS replies without the
+ answer types we expected. Fixes bug 9337; bugfix on 0.2.4.7-alpha.
+
diff --git a/changes/bug9354 b/changes/bug9354
new file mode 100644
index 000000000..68fc81a59
--- /dev/null
+++ b/changes/bug9354
@@ -0,0 +1,5 @@
+ o Minor bugfixes:
+ - Make the default behavior of NumDirectoryGuards be to track
+ NumEntryGuards. Now a user who changes only NumEntryGuards will get
+ the behavior she expects. Fixes bug 9354; bugfix on 0.2.4.8-alpha.
+
diff --git a/changes/fancy_testing b/changes/fancy_testing
new file mode 100644
index 000000000..fa5b5703c
--- /dev/null
+++ b/changes/fancy_testing
@@ -0,0 +1,27 @@
+ o Build features:
+
+ - Tor now builds each source file in two modes: a mode that avoids
+ exposing identifiers needlessly, and another mode that exposes
+ more identifiers for testing. This lets the compiler do better at
+ optimizing the production code, while enabling us to take more
+ radical measures to let the unit tests test things.
+
+ - The production builds no longer include functions used only
+ in the unit tests; all functions exposed from a module for
+ unit-testing only are now static in production builds.
+
+ - Add an --enable-coverage configuration option to make the unit
+ tests (and a new src/or/tor-cov target) to build with gcov test
+ coverage support.
+
+ o Testing:
+
+ - We now have rudimentary function mocking support that our unit
+ tests can use to test functions in isolation. Function mocking
+ lets the tests temporarily replace a function's dependencies with
+ stub functions, so that the tests can check the function without
+ invoking the other functions it calls.
+
+ - Add more unit tests for the <circid,channel>->circuit map, and
+ the destroy-cell-tracking code to fix bug 7912.
+
diff --git a/changes/geoip-august2013 b/changes/geoip-august2013
new file mode 100644
index 000000000..bd15177a0
--- /dev/null
+++ b/changes/geoip-august2013
@@ -0,0 +1,3 @@
+ o Minor features:
+ - Update to the August 7 2013 Maxmind GeoLite Country database.
+
diff --git a/changes/geoip-july2013 b/changes/geoip-july2013
new file mode 100644
index 000000000..097819dd7
--- /dev/null
+++ b/changes/geoip-july2013
@@ -0,0 +1,3 @@
+ o Minor features:
+ - Update to the July 3 2013 Maxmind GeoLite Country database.
+
diff --git a/changes/seccomp2_sandbox b/changes/seccomp2_sandbox
new file mode 100644
index 000000000..73b3a8d5e
--- /dev/null
+++ b/changes/seccomp2_sandbox
@@ -0,0 +1,12 @@
+ o Major features (security):
+ - Use the seccomp2 syscall filtering facility on Linux to limit
+ which system calls Tor can invoke. This is an experimental,
+ Linux-only feature to provide defense-in-depth against unknown
+ attacks. To try turning it on, set "Sandbox 1" in your torrc
+ file. This is an experimental feature, however, and some things
+ may break, so please be ready to report bugs. We hope to add
+ support for better sandboxing in the future,
+ including more fine-grained filters, better division of
+ responsibility, and support for more platforms. This work has
+ been done by Cristian-Matei Toader for Google Summer of Code.
+
diff --git a/changes/ticket5129 b/changes/ticket5129
new file mode 100644
index 000000000..c05ca68a3
--- /dev/null
+++ b/changes/ticket5129
@@ -0,0 +1,3 @@
+ o Minor features:
+ - Use the SOCK_NONBLOCK socket type, if supported, to open nonblocking
+ sockets in a single system call. Implements ticket #5129.
diff --git a/changes/ticket_9214 b/changes/ticket_9214
new file mode 100644
index 000000000..f1e43caeb
--- /dev/null
+++ b/changes/ticket_9214
@@ -0,0 +1,6 @@
+ o Minor features:
+ - Accept bandwidth and space limits in bits as well as bytes.
+ (Anywhere in the configuration file that you can say "2 Kilobytes",
+ you can now say "16 kilobits", and so on.) Resolves ticket 9214.
+ Patch by CharlieB.
+
diff --git a/changes/v3_intro_len b/changes/v3_intro_len
new file mode 100644
index 000000000..fbe39bce3
--- /dev/null
+++ b/changes/v3_intro_len
@@ -0,0 +1,8 @@
+ o Major bugfixes:
+
+ - Fix an uninitialized read that could (in some cases) lead to a remote
+ crash while parsing INTRODUCE 1 cells. (This is, so far as we know,
+ unrelated to the recent news.) Fixes bug XXX; bugfix on
+ 0.2.4.1-alpha. Anybody running a hidden service on the experimental
+ 0.2.4.x branch should upgrade.
+
diff --git a/configure.ac b/configure.ac
index 235f19b43..4aeec929e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,6 +39,13 @@ AC_ARG_ENABLE(static-tor,
AS_HELP_STRING(--enable-static-tor, Create an entirely static Tor binary. Requires --with-openssl-dir and --with-libevent-dir and --with-zlib-dir))
AC_ARG_ENABLE(curve25519,
AS_HELP_STRING(--disable-curve25519, Build Tor with no curve25519 elliptic-curve crypto support))
+AC_ARG_ENABLE(unittests,
+ AS_HELP_STRING(--disable-unittests, [Don't build unit tests for Tor. Risky!]))
+AC_ARG_ENABLE(coverage,
+ AS_HELP_STRING(--enable-coverage, [Enable coverage support in the unit-test build]))
+
+AM_CONDITIONAL(UNITTESTS_ENABLED, test x$enable_unittests != xno)
+AM_CONDITIONAL(COVERAGE_ENABLED, test x$enable_coverage = xyes)
if test "$enable_static_tor" = "yes"; then
enable_static_libevent="yes";
@@ -656,6 +663,12 @@ if test "$upnp" = "true"; then
fi
dnl ============================================================
+dnl Check for libseccomp
+
+AC_CHECK_HEADERS([seccomp.h])
+AC_SEARCH_LIBS(seccomp_init, [seccomp])
+
+dnl ============================================================
dnl We need an implementation of curve25519.
dnl set these defaults.
@@ -1453,7 +1466,12 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
# CFLAGS="$CFLAGS -Winline"
fi
-
+if test "$enable_coverage" = yes && test "$have_clang" = "no"; then
+ case "$host_os" in
+ darwin*)
+ AC_MSG_WARN([Tried to enable coverage on OSX without using the clang compiler. This might not work! If coverage fails, use CC=clang when configuring with --enable-profiling.])
+ esac
+fi
CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_zlib"
diff --git a/contrib/cov-blame b/contrib/cov-blame
new file mode 100755
index 000000000..601f21195
--- /dev/null
+++ b/contrib/cov-blame
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+
+import os
+import re
+import subprocess
+import sys
+
+def handle_file(source_fname, cov_fname):
+
+ lines_blm = subprocess.Popen(["git", "blame", source_fname], stdout=subprocess.PIPE).stdout.readlines()
+ lines_cov = open(cov_fname).readlines()
+
+ # XXXX expensive!
+ while re.match(r'\s*-:\s*0:', lines_cov[0]):
+ del lines_cov[0]
+
+ if len(lines_blm) != len(lines_cov):
+ print >>sys.stderr, "MISMATCH IN NUMBER OF LINES in",source_fname
+
+ for b,c in zip(lines_blm, lines_cov):
+ m = re.match(r'\s*([^\s:]+):', c)
+ if not m:
+ print >>sys.stderr, "CONFUSING LINE %r"% c
+ cov = 'X'
+ elif m.group(1) == '-':
+ cov = '-'
+ elif m.group(1)[0] == '#':
+ cov = '#'
+ elif m.group(1)[0].isdigit():
+ cov = '1'
+ else:
+ print >>sys.stderr, "CONFUSING LINE %r"% c
+ cov = 'X'
+
+ print cov, b,
+
+COV_DIR = sys.argv[1]
+SOURCES = sys.argv[2:]
+
+for fn in SOURCES:
+ _, base = os.path.split(fn)
+ cfn = os.path.join(COV_DIR, base)
+ cfn += ".gcov"
+ if os.path.exists(cfn):
+ handle_file(fn, cfn)
+ else:
+ print >>sys.stderr, "NO FILE EXISTS CALLED ",cfn
+
diff --git a/contrib/cov-diff b/contrib/cov-diff
new file mode 100755
index 000000000..33a54802b
--- /dev/null
+++ b/contrib/cov-diff
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright 2013 The Tor Project, Inc.
+# See LICENSE for licensing information.
+
+# cov-diff -- compare two directories full of gcov files.
+
+DIRA="$1"
+DIRB="$2"
+
+for A in $DIRA/*; do
+ B=$DIRB/`basename $A`
+ perl -pe 's/^\s*\d+:/ 1:/; s/^([^:]+:)[\d\s]+:/$1/;' "$A" > "$A.tmp"
+ perl -pe 's/^\s*\d+:/ 1:/; s/^([^:]+:)[\d\s]+:/$1/;' "$B" > "$B.tmp"
+ diff -u "$A.tmp" "$B.tmp"
+ rm "$A.tmp" "$B.tmp"
+done
+
diff --git a/contrib/coverage b/contrib/coverage
new file mode 100755
index 000000000..f4ae47582
--- /dev/null
+++ b/contrib/coverage
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Copyright 2013 The Tor Project, Inc.
+# See LICENSE for licensing information.
+
+# coverage -- run gcov on the appropriate set of object files to extract
+# coverage information.
+
+dst=$1
+
+for fn in src/or/*.c src/common/*.c; do
+ BN=`basename $fn`
+ DN=`dirname $fn`
+ F=`echo $BN | sed -e 's/\.c$//;'`
+ GC="${BN}.gcov"
+ # Figure out the object file names
+ ONS=`echo ${DN}/src_*-${F}.o`
+ ONS_WILDCARD_LITERAL="${DN}/src_*-${F}.o"
+ # If the wildcard didn't expand, no files
+ if [ "$ONS" != "${ONS_WILDCARD_LITERAL}" ]
+ then
+ for on in $ONS; do
+ # We should have a gcno file
+ GCNO=`echo $on | sed -e 's/\.o$/\.gcno/;'`
+ if [ -e $GCNO ]
+ then
+ # No need to test for gcda, since gcov assumes no execution
+ # if it's absent
+ rm -f $GC
+ gcov -o $on $fn
+ if [ -e $GC ]
+ then
+ if [ -n $dst ]
+ then
+ mv $GC $dst/$GC
+ fi
+ else
+ echo "gcov -o $on $fn didn't make a .gcov file"
+ fi
+ else
+ echo "Couldn't find gcno file for $on"
+ fi
+ done
+ else
+ echo "No object file found matching source file $fn"
+ fi
+done
diff --git a/doc/HACKING b/doc/HACKING
index b7cd8952d..b4d258612 100644
--- a/doc/HACKING
+++ b/doc/HACKING
@@ -118,25 +118,21 @@ Running gcov for unit test coverage
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----
- make clean
- make CFLAGS='-g -fprofile-arcs -ftest-coverage'
- ./src/test/test
- gcov -o src/common src/common/*.[ch]
- gcov -o src/or src/or/*.[ch]
- cd ../or; gcov *.[ch]
+ ./configure --enable-coverage
+ make
+ ./src/test/test
+ mkdir coverage-output
+ ./contrib/coverage coverage-output
-----
-Then, look at the .gcov files. '-' before a line means that the
-compiler generated no code for that line. '######' means that the
-line was never reached. Lines with numbers were called that number
-of times.
+(On OSX, you'll need to start with "--enable-coverage CC=clang".)
+
+Then, look at the .gcov files in coverage-output. '-' before a line means
+that the compiler generated no code for that line. '######' means that the
+line was never reached. Lines with numbers were called that number of times.
If that doesn't work:
* Try configuring Tor with --disable-gcc-hardening
- * On recent OSX versions, you might need to add CC=clang to your
- build line, as in:
- make CFLAGS='-g -fprofile-arcs -ftest-coverage' CC=clang
- Their llvm-gcc doesn't work so great for me.
Profiling Tor with oprofile
~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -493,12 +489,8 @@ in their approved versions list.
8) scp the tarball and its sig to the website in the dist/ directory
(i.e. /srv/www-master.torproject.org/htdocs/dist/ on vescum). Edit
-include/versions.wmi to note the new version. From your website checkout,
-run ./publish to build and publish the website.
-
-Try not to delay too much between scp'ing the tarball and running
-./publish -- the website has multiple A records and your scp only sent
-it to one of them.
+"include/versions.wmi" and "Makefile" to note the new version. From your
+website checkout, run ./publish to build and publish the website.
9) Email Erinn and weasel (cc'ing tor-assistants) that a new tarball
is up. This step should probably change to mailing more packagers.
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index aa37f1baf..8bc15d9c2 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -124,42 +124,42 @@ option name with a forward slash.
GENERAL OPTIONS
---------------
-**BandwidthRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**BandwidthRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
A token bucket limits the average incoming bandwidth usage on this node to
the specified number of bytes per second, and the average outgoing
bandwidth usage to that same value. If you want to run a relay in the
public network, this needs to be _at the very least_ 30 KBytes (that is,
30720 bytes). (Default: 1 GByte)
-**BandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**BandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Limit the maximum token bucket size (also known as the burst) to the given
number of bytes in each direction. (Default: 1 GByte)
-**MaxAdvertisedBandwidth** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**MaxAdvertisedBandwidth** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If set, we will not advertise more than this amount of bandwidth for our
BandwidthRate. Server operators who want to reduce the number of clients
who ask to build circuits through them (since this is proportional to
advertised bandwidth rate) can thus reduce the CPU demands on their server
without impacting network performance.
-**RelayBandwidthRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**RelayBandwidthRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If not 0, a separate token bucket limits the average incoming bandwidth
usage for \_relayed traffic_ on this node to the specified number of bytes
per second, and the average outgoing bandwidth usage to that same value.
Relayed traffic currently is calculated to include answers to directory
requests, but that may change in future versions. (Default: 0)
-**RelayBandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**RelayBandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If not 0, limit the maximum token bucket size (also known as the burst) for
\_relayed traffic_ to the given number of bytes in each direction.
(Default: 0)
-**PerConnBWRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**PerConnBWRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If set, do separate rate limiting for each connection from a non-relay.
You should never need to change this value, since a network-wide value is
published in the consensus and your relay will use that value. (Default: 0)
-**PerConnBWBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**PerConnBWBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
If set, do separate rate limiting for each connection from a non-relay.
You should never need to change this value, since a network-wide value is
published in the consensus and your relay will use that value. (Default: 0)
@@ -186,6 +186,11 @@ GENERAL OPTIONS
listening address of any pluggable transport proxy that tries to
launch __transport__.
+**ServerTransportOptions** __transport__ __k=v__ __k=v__ ...::
+ When this option is set, Tor will pass the __k=v__ parameters to
+ any pluggable transport proxy that tries to launch __transport__. +
+ (Example: ServerTransportOptions obfs45 shared-secret=bridgepasswd cache=/var/lib/tor/cache)
+
**ConnLimit** __NUM__::
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
@@ -423,6 +428,11 @@ GENERAL OPTIONS
proxy authentication that Tor supports; feel free to submit a patch if you
want it to support others.
+**Sandbox** **0**|**1**::
+ If set to 1, Tor will run securely through the use of a syscall sandbox.
+ Otherwise the sandbox will be disabled. The option is currently an
+ experimental feature. (Default: 0)
+
**Socks4Proxy** __host__[:__port__]::
Tor will make all OR connections through the SOCKS 4 proxy at host:port
(or host:1080 if port is not specified).
@@ -1043,7 +1053,8 @@ The following options are useful only for clients (that is, if
fraction of your paths. (Default: 1)
**UseEntryGuardsAsDirectoryGuards** **0**|**1**::
- If this option is set to 1, we try to use our entry guards as directory
+ If this option is set to 1, and UseEntryGuards is also set to 1,
+ we try to use our entry guards as directory
guards, and failing that, pick more nodes to act as our directory guards.
This helps prevent an adversary from enumerating clients. It's only
available for clients (non-relay, non-bridge) that aren't configured to
@@ -1056,7 +1067,8 @@ The following options are useful only for clients (that is, if
**NumDirectoryGuards** __NUM__::
If UseEntryGuardsAsDirectoryGuards is enabled, we try to make sure we
- have at least NUM routers to use as directory guards. (Default: 3)
+ have at least NUM routers to use as directory guards. If this option
+ is set to 0, use the value from NumEntryGuards. (Default: 0)
**GuardLifetime** __N__ **days**|**weeks**|**months**::
If nonzero, and UseEntryGuards is set, minimum time to keep a guard before
@@ -1532,7 +1544,7 @@ is non-zero):
server is still alive and doing useful things. Settings this
to 0 will disable the heartbeat. (Default: 6 hours)
-**AccountingMax** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**TBytes**::
+**AccountingMax** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**|**TBytes**::
Never send more than the specified number of bytes in a given accounting
period, or receive more than that number in the period. For example, with
AccountingMax set to 1 GByte, a server could send 900 MBytes and
@@ -1669,7 +1681,7 @@ is non-zero):
If it hits this threshold, it will begin killing circuits until it
has recovered at least 10% of this memory. Do not set this option too
low, or your relay may be unreliable under load. This option only
- effects circuit queues, so the actual process size will be larger than
+ affects circuit queues, so the actual process size will be larger than
this. (Default: 8GB)
DIRECTORY SERVER OPTIONS
@@ -1864,12 +1876,12 @@ DIRECTORY AUTHORITY SERVER OPTIONS
Authoritative directories only. Like AuthDirMaxServersPerAddr, but applies
to addresses shared with directory authorities. (Default: 5)
-**AuthDirFastGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**AuthDirFastGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Authoritative directories only. If non-zero, always vote the
Fast flag for any relay advertising this amount of capacity or
more. (Default: 100 KBytes)
-**AuthDirGuardBWGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**AuthDirGuardBWGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Authoritative directories only. If non-zero, this advertised capacity
or more is always sufficient to satisfy the bandwidth requirement
for the Guard flag. (Default: 250 KBytes)
@@ -2055,7 +2067,7 @@ The following options are used for running a testing Tor network.
time. Changing this requires that **TestingTorNetwork** is set. (Default:
10 minutes)
-**TestingMinFastFlagThreshold** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**::
+**TestingMinFastFlagThreshold** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**KBits**|**MBits**|**GBits**::
Minimum value for the Fast flag. Overrides the ordinary minimum taken
from the consensus when TestingTorNetwork is set. (Default: 0.)
diff --git a/src/common/compat.c b/src/common/compat.c
index 69eb0643d..3768933ed 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -23,6 +23,7 @@
* we can also take out the configure check. */
#define _GNU_SOURCE
+#define COMPAT_PRIVATE
#include "compat.h"
#ifdef _WIN32
@@ -948,24 +949,40 @@ socket_accounting_unlock(void)
}
/** As close(), but guaranteed to work for sockets across platforms (including
- * Windows, where close()ing a socket doesn't work. Returns 0 on success, -1
- * on failure. */
+ * Windows, where close()ing a socket doesn't work. Returns 0 on success and
+ * the socket error code on failure. */
int
-tor_close_socket(tor_socket_t s)
+tor_close_socket_simple(tor_socket_t s)
{
int r = 0;
/* On Windows, you have to call close() on fds returned by open(),
- * and closesocket() on fds returned by socket(). On Unix, everything
- * gets close()'d. We abstract this difference by always using
- * tor_close_socket to close sockets, and always using close() on
- * files.
- */
-#if defined(_WIN32)
- r = closesocket(s);
-#else
- r = close(s);
-#endif
+ * and closesocket() on fds returned by socket(). On Unix, everything
+ * gets close()'d. We abstract this difference by always using
+ * tor_close_socket to close sockets, and always using close() on
+ * files.
+ */
+ #if defined(_WIN32)
+ r = closesocket(s);
+ #else
+ r = close(s);
+ #endif
+
+ if (r != 0) {
+ int err = tor_socket_errno(-1);
+ log_info(LD_NET, "Close returned an error: %s", tor_socket_strerror(err));
+ return err;
+ }
+
+ return r;
+}
+
+/** As tor_close_socket_simple(), but keeps track of the number
+ * of open sockets. Returns 0 on success, -1 on failure. */
+int
+tor_close_socket(tor_socket_t s)
+{
+ int r = tor_close_socket_simple(s);
socket_accounting_lock();
#ifdef DEBUG_SOCKET_COUNTING
@@ -980,13 +997,11 @@ tor_close_socket(tor_socket_t s)
if (r == 0) {
--n_sockets_open;
} else {
- int err = tor_socket_errno(-1);
- log_info(LD_NET, "Close returned an error: %s", tor_socket_strerror(err));
#ifdef _WIN32
- if (err != WSAENOTSOCK)
+ if (r != WSAENOTSOCK)
--n_sockets_open;
#else
- if (err != EBADF)
+ if (r != EBADF)
--n_sockets_open;
#endif
r = -1;
@@ -1032,33 +1047,61 @@ mark_socket_open(tor_socket_t s)
tor_socket_t
tor_open_socket(int domain, int type, int protocol)
{
+ return tor_open_socket_with_extensions(domain, type, protocol, 1, 0);
+}
+
+/** As socket(), but creates a nonblocking socket and
+ * counts the number of open sockets. */
+tor_socket_t
+tor_open_socket_nonblocking(int domain, int type, int protocol)
+{
+ return tor_open_socket_with_extensions(domain, type, protocol, 1, 1);
+}
+
+/** As socket(), but counts the number of open sockets and handles
+ * socket creation with either of SOCK_CLOEXEC and SOCK_NONBLOCK specified.
+ * <b>cloexec</b> and <b>nonblock</b> should be either 0 or 1 to indicate
+ * if the corresponding extension should be used.*/
+tor_socket_t
+tor_open_socket_with_extensions(int domain, int type, int protocol,
+ int cloexec, int nonblock)
+{
tor_socket_t s;
-#ifdef SOCK_CLOEXEC
- s = socket(domain, type|SOCK_CLOEXEC, protocol);
+#if defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK)
+ int ext_flags = (cloexec ? SOCK_CLOEXEC : 0) |
+ (nonblock ? SOCK_NONBLOCK : 0);
+ s = socket(domain, type|ext_flags, protocol);
if (SOCKET_OK(s))
goto socket_ok;
/* If we got an error, see if it is EINVAL. EINVAL might indicate that,
- * even though we were built on a system with SOCK_CLOEXEC support, we
- * are running on one without. */
+ * even though we were built on a system with SOCK_CLOEXEC and SOCK_NONBLOCK
+ * support, we are running on one without. */
if (errno != EINVAL)
return s;
-#endif /* SOCK_CLOEXEC */
+#endif /* SOCK_CLOEXEC && SOCK_NONBLOCK */
s = socket(domain, type, protocol);
if (! SOCKET_OK(s))
return s;
#if defined(FD_CLOEXEC)
- if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
- log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
-#if defined(_WIN32)
- closesocket(s);
+ if (cloexec) {
+ if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
+ }
#else
- close(s);
+ (void)cloexec;
#endif
- return -1;
+
+ if (nonblock) {
+ if (set_socket_nonblocking(s) == -1) {
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
}
-#endif
goto socket_ok; /* So that socket_ok will not be unused. */
@@ -1070,19 +1113,41 @@ tor_open_socket(int domain, int type, int protocol)
return s;
}
-/** As socket(), but counts the number of open sockets. */
+/** As accept(), but counts the number of open sockets. */
tor_socket_t
tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len)
{
+ return tor_accept_socket_with_extensions(sockfd, addr, len, 1, 0);
+}
+
+/** As accept(), but returns a nonblocking socket and
+ * counts the number of open sockets. */
+tor_socket_t
+tor_accept_socket_nonblocking(tor_socket_t sockfd, struct sockaddr *addr,
+ socklen_t *len)
+{
+ return tor_accept_socket_with_extensions(sockfd, addr, len, 1, 1);
+}
+
+/** As accept(), but counts the number of open sockets and handles
+ * socket creation with either of SOCK_CLOEXEC and SOCK_NONBLOCK specified.
+ * <b>cloexec</b> and <b>nonblock</b> should be either 0 or 1 to indicate
+ * if the corresponding extension should be used.*/
+tor_socket_t
+tor_accept_socket_with_extensions(tor_socket_t sockfd, struct sockaddr *addr,
+ socklen_t *len, int cloexec, int nonblock)
+{
tor_socket_t s;
-#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
- s = accept4(sockfd, addr, len, SOCK_CLOEXEC);
+#if defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK)
+ int ext_flags = (cloexec ? SOCK_CLOEXEC : 0) |
+ (nonblock ? SOCK_NONBLOCK : 0);
+ s = accept4(sockfd, addr, len, ext_flags);
if (SOCKET_OK(s))
goto socket_ok;
/* If we got an error, see if it is ENOSYS. ENOSYS indicates that,
* even though we were built on a system with accept4 support, we
* are running on one without. Also, check for EINVAL, which indicates that
- * we are missing SOCK_CLOEXEC support. */
+ * we are missing SOCK_CLOEXEC/SOCK_NONBLOCK support. */
if (errno != EINVAL && errno != ENOSYS)
return s;
#endif
@@ -1092,13 +1157,24 @@ tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len)
return s;
#if defined(FD_CLOEXEC)
- if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
- log_warn(LD_NET, "Couldn't set FD_CLOEXEC: %s", strerror(errno));
- close(s);
- return TOR_INVALID_SOCKET;
+ if (cloexec) {
+ if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_NET, "Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
}
+#else
+ (void)cloexec;
#endif
+ if (nonblock) {
+ if (set_socket_nonblocking(s) == -1) {
+ tor_close_socket_simple(s);
+ return TOR_INVALID_SOCKET;
+ }
+ }
+
goto socket_ok; /* So that socket_ok will not be unused. */
socket_ok:
@@ -1220,6 +1296,18 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
return 0;
#else
+ return tor_ersatz_socketpair(family, type, protocol, fd);
+#endif
+}
+
+#ifdef NEED_ERSATZ_SOCKETPAIR
+/**
+ * Helper used to implement socketpair on systems that lack it, by
+ * making a direct connection to localhost.
+ */
+STATIC int
+tor_ersatz_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
+{
/* This socketpair does not work when localhost is down. So
* it's really not the same thing at all. But it's close enough
* for now, and really, when localhost is down sometimes, we
@@ -1230,7 +1318,7 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
tor_socket_t acceptor = -1;
struct sockaddr_in listen_addr;
struct sockaddr_in connect_addr;
- int size;
+ socklen_t size;
int saved_errno = -1;
if (protocol
@@ -1313,8 +1401,8 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
if (acceptor != -1)
tor_close_socket(acceptor);
return -saved_errno;
-#endif
}
+#endif
/** Number of extra file descriptors to keep in reserve beyond those that we
* tell Tor it's allowed to use. */
@@ -1746,6 +1834,15 @@ get_user_homedir(const char *username)
* actually examine the filesystem; does a purely syntactic modification.
*
* The parent of the root director is considered to be iteself.
+ *
+ * Path separators are the forward slash (/) everywhere and additionally
+ * the backslash (\) on Win32.
+ *
+ * Cuts off any number of trailing path separators but otherwise ignores
+ * them for purposes of finding the parent directory.
+ *
+ * Returns 0 if a parent directory was successfully found, -1 otherwise (fname
+ * did not have any path separators or only had them at the end).
* */
int
get_parent_directory(char *fname)
diff --git a/src/common/compat.h b/src/common/compat.h
index 258fc9902..8e700a9a1 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -8,6 +8,7 @@
#include "orconfig.h"
#include "torint.h"
+#include "testsupport.h"
#ifdef _WIN32
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
@@ -450,10 +451,22 @@ typedef int socklen_t;
#define TOR_INVALID_SOCKET (-1)
#endif
+int tor_close_socket_simple(tor_socket_t s);
int tor_close_socket(tor_socket_t s);
+tor_socket_t tor_open_socket_with_extensions(
+ int domain, int type, int protocol,
+ int cloexec, int nonblock);
tor_socket_t tor_open_socket(int domain, int type, int protocol);
+tor_socket_t tor_open_socket_nonblocking(int domain, int type, int protocol);
tor_socket_t tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr,
socklen_t *len);
+tor_socket_t tor_accept_socket_nonblocking(tor_socket_t sockfd,
+ struct sockaddr *addr,
+ socklen_t *len);
+tor_socket_t tor_accept_socket_with_extensions(tor_socket_t sockfd,
+ struct sockaddr *addr,
+ socklen_t *len,
+ int cloexec, int nonblock);
int get_n_open_sockets(void);
#define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags)
@@ -726,5 +739,13 @@ char *format_win32_error(DWORD err);
#endif
+#ifdef COMPAT_PRIVATE
+#if !defined(HAVE_SOCKETPAIR) || defined(_WIN32) || defined(TOR_UNIT_TESTS)
+#define NEED_ERSATZ_SOCKETPAIR
+STATIC int tor_ersatz_socketpair(int family, int type, int protocol,
+ tor_socket_t fd[2]);
+#endif
+#endif
+
#endif
diff --git a/src/common/crypto.c b/src/common/crypto.c
index e60172b74..6f1a0bca5 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1232,8 +1232,8 @@ crypto_pk_get_all_digests(crypto_pk_t *pk, digests_t *digests_out)
/** Copy <b>in</b> to the <b>outlen</b>-byte buffer <b>out</b>, adding spaces
* every four spaces. */
-/* static */ void
-add_spaces_to_fp(char *out, size_t outlen, const char *in)
+void
+crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in)
{
int n = 0;
char *end = out+outlen;
@@ -1270,7 +1270,7 @@ crypto_pk_get_fingerprint(crypto_pk_t *pk, char *fp_out, int add_space)
}
base16_encode(hexdigest,sizeof(hexdigest),digest,DIGEST_LEN);
if (add_space) {
- add_spaces_to_fp(fp_out, FINGERPRINT_LEN+1, hexdigest);
+ crypto_add_spaces_to_fp(fp_out, FINGERPRINT_LEN+1, hexdigest);
} else {
strncpy(fp_out, hexdigest, HEX_DIGEST_LEN+1);
}
@@ -2404,8 +2404,8 @@ crypto_seed_rng(int startup)
/** Write <b>n</b> bytes of strong random data to <b>to</b>. Return 0 on
* success, -1 on failure.
*/
-int
-crypto_rand(char *to, size_t n)
+MOCK_IMPL(int,
+crypto_rand, (char *to, size_t n))
{
int r;
tor_assert(n < INT_MAX);
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 2886306a6..2750ed810 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -15,6 +15,7 @@
#include <stdio.h>
#include "torint.h"
+#include "testsupport.h"
/*
Macro to create an arbitrary OpenSSL version number as used by
@@ -247,7 +248,7 @@ int crypto_expand_key_material_rfc5869_sha256(
/* random numbers */
int crypto_seed_rng(int startup);
-int crypto_rand(char *to, size_t n);
+MOCK_DECL(int,crypto_rand,(char *to, size_t n));
int crypto_strongest_rand(uint8_t *out, size_t out_len);
int crypto_rand_int(unsigned int max);
uint64_t crypto_rand_uint64(uint64_t max);
@@ -283,7 +284,6 @@ void secret_to_key(char *key_out, size_t key_out_len, const char *secret,
/** OpenSSL-based utility functions. */
void memwipe(void *mem, uint8_t byte, size_t sz);
-#ifdef CRYPTO_PRIVATE
/* Prototypes for private functions only used by tortls.c, crypto.c, and the
* unit tests. */
struct rsa_st;
@@ -294,9 +294,8 @@ crypto_pk_t *crypto_new_pk_from_rsa_(struct rsa_st *rsa);
struct evp_pkey_st *crypto_pk_get_evp_pkey_(crypto_pk_t *env,
int private);
struct dh_st *crypto_dh_get_dh_(crypto_dh_t *dh);
-/* Prototypes for private functions only used by crypto.c and test.c*/
-void add_spaces_to_fp(char *out, size_t outlen, const char *in);
-#endif
+
+void crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in);
#endif
diff --git a/src/common/crypto_curve25519.c b/src/common/crypto_curve25519.c
index 88c723f37..9e83440e1 100644
--- a/src/common/crypto_curve25519.c
+++ b/src/common/crypto_curve25519.c
@@ -29,7 +29,7 @@ int curve25519_donna(uint8_t *mypublic,
#endif
#endif
-int
+STATIC int
curve25519_impl(uint8_t *output, const uint8_t *secret,
const uint8_t *basepoint)
{
diff --git a/src/common/crypto_curve25519.h b/src/common/crypto_curve25519.h
index 652f1883c..f9d533ba2 100644
--- a/src/common/crypto_curve25519.h
+++ b/src/common/crypto_curve25519.h
@@ -4,6 +4,7 @@
#ifndef TOR_CRYPTO_CURVE25519_H
#define TOR_CRYPTO_CURVE25519_H
+#include "testsupport.h"
#include "torint.h"
/** Length of a curve25519 public key when encoded. */
@@ -52,8 +53,8 @@ int curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
const char *fname);
#ifdef CRYPTO_CURVE25519_PRIVATE
-int curve25519_impl(uint8_t *output, const uint8_t *secret,
- const uint8_t *basepoint);
+STATIC int curve25519_impl(uint8_t *output, const uint8_t *secret,
+ const uint8_t *basepoint);
#endif
#endif
diff --git a/src/common/crypto_format.c b/src/common/crypto_format.c
index 93932f839..be669c8d2 100644
--- a/src/common/crypto_format.c
+++ b/src/common/crypto_format.c
@@ -3,7 +3,6 @@
/* Formatting and parsing code for crypto-related data structures. */
-#define CRYPTO_CURVE25519_PRIVATE
#include "orconfig.h"
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
diff --git a/src/common/include.am b/src/common/include.am
index 68275cbcf..032befd20 100644
--- a/src/common/include.am
+++ b/src/common/include.am
@@ -1,5 +1,15 @@
-noinst_LIBRARIES+= src/common/libor.a src/common/libor-crypto.a src/common/libor-event.a
+noinst_LIBRARIES += \
+ src/common/libor.a \
+ src/common/libor-crypto.a \
+ src/common/libor-event.a
+
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += \
+ src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a \
+ src/common/libor-event-testing.a
+endif
EXTRA_DIST+= \
src/common/common_sha1.i \
@@ -38,7 +48,7 @@ if CURVE25519_ENABLED
libcrypto_extra_source=src/common/crypto_curve25519.c
endif
-src_common_libor_a_SOURCES = \
+LIBOR_A_SOURCES = \
src/common/address.c \
src/common/compat.c \
src/common/container.c \
@@ -49,9 +59,10 @@ src_common_libor_a_SOURCES = \
src/common/procmon.c \
src/common/util.c \
src/common/util_codedigest.c \
+ src/common/sandbox.c \
$(libor_extra_source)
-src_common_libor_crypto_a_SOURCES = \
+LIBOR_CRYPTO_A_SOURCES = \
src/common/aes.c \
src/common/crypto.c \
src/common/crypto_format.c \
@@ -59,7 +70,23 @@ src_common_libor_crypto_a_SOURCES = \
src/common/tortls.c \
$(libcrypto_extra_source)
-src_common_libor_event_a_SOURCES = src/common/compat_libevent.c
+LIBOR_EVENT_A_SOURCES = src/common/compat_libevent.c
+
+src_common_libor_a_SOURCES = $(LIBOR_A_SOURCES)
+src_common_libor_crypto_a_SOURCES = $(LIBOR_CRYPTO_A_SOURCES)
+src_common_libor_event_a_SOURCES = $(LIBOR_EVENT_A_SOURCES)
+
+src_common_libor_testing_a_SOURCES = $(LIBOR_A_SOURCES)
+src_common_libor_crypto_testing_a_SOURCES = $(LIBOR_CRYPTO_A_SOURCES)
+src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SOURCES)
+
+src_common_libor_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_crypto_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_event_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_common_libor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_common_libor_crypto_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_common_libor_event_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
COMMONHEADERS = \
src/common/address.h \
@@ -74,6 +101,8 @@ COMMONHEADERS = \
src/common/memarea.h \
src/common/mempool.h \
src/common/procmon.h \
+ src/common/sandbox.h \
+ src/common/testsupport.h \
src/common/torgzip.h \
src/common/torint.h \
src/common/torlog.h \
diff --git a/src/common/log.c b/src/common/log.c
index e196a1128..303fba93a 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -36,6 +36,10 @@
#include "torlog.h"
#include "container.h"
+/** Given a severity, yields an index into log_severity_list_t.masks to use
+ * for that severity. */
+#define SEVERITY_MASK_IDX(sev) ((sev) - LOG_ERR)
+
/** @{ */
/** The string we stick at the end of a log message when it is too long,
* and its length. */
@@ -1138,6 +1142,22 @@ get_min_log_level(void)
return min;
}
+/** Return the fd of a file log that is receiving ERR messages, or -1 if
+ * no such log exists. */
+int
+get_err_logging_fd(void)
+{
+ const logfile_t *lf;
+ for (lf = logfiles; lf; lf = lf->next) {
+ if (lf->is_temporary || lf->is_syslog || !lf->filename ||
+ lf->callback || lf->seems_dead || lf->fd < 0)
+ continue;
+ if (lf->severities->masks[LOG_ERR] & LD_GENERAL)
+ return lf->fd;
+ }
+ return -1;
+}
+
/** Switch all logs to output at most verbose level. */
void
switch_logs_debug(void)
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
new file mode 100644
index 000000000..dbb1657cd
--- /dev/null
+++ b/src/common/sandbox.c
@@ -0,0 +1,331 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file sandbox.c
+ * \brief Code to enable sandboxing.
+ **/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "orconfig.h"
+#include "sandbox.h"
+#include "torlog.h"
+#include "util.h"
+
+#if defined(HAVE_SECCOMP_H) && defined(__linux__)
+#define USE_LIBSECCOMP
+#endif
+
+#define DEBUGGING_CLOSE
+
+#if defined(USE_LIBSECCOMP)
+
+#include <sys/syscall.h>
+#include <seccomp.h>
+#include <signal.h>
+#include <unistd.h>
+
+/** Variable used for storing all syscall numbers that will be allowed with the
+ * stage 1 general Tor sandbox.
+ */
+static int general_filter[] = {
+ SCMP_SYS(access),
+ SCMP_SYS(brk),
+ SCMP_SYS(clock_gettime),
+ SCMP_SYS(close),
+ SCMP_SYS(clone),
+ SCMP_SYS(epoll_create),
+ SCMP_SYS(epoll_ctl),
+ SCMP_SYS(epoll_wait),
+ SCMP_SYS(execve),
+ SCMP_SYS(fcntl),
+#ifdef __NR_fcntl64
+ /* Older libseccomp versions don't define PNR entries for all of these,
+ * so we need to ifdef them here.*/
+ SCMP_SYS(fcntl64),
+#endif
+ SCMP_SYS(flock),
+ SCMP_SYS(fstat),
+#ifdef __NR_fstat64
+ SCMP_SYS(fstat64),
+#endif
+ SCMP_SYS(futex),
+ SCMP_SYS(getdents64),
+ SCMP_SYS(getegid),
+#ifdef __NR_getegid32
+ SCMP_SYS(getegid32),
+#endif
+ SCMP_SYS(geteuid),
+#ifdef __NR_geteuid32
+ SCMP_SYS(geteuid32),
+#endif
+ SCMP_SYS(getgid),
+#ifdef __NR_getgid32
+ SCMP_SYS(getgid32),
+#endif
+ SCMP_SYS(getrlimit),
+ SCMP_SYS(gettimeofday),
+ SCMP_SYS(getuid),
+#ifdef __NR_getuid32
+ SCMP_SYS(getuid32),
+#endif
+ SCMP_SYS(lseek),
+#ifdef __NR__llseek
+ SCMP_SYS(_llseek),
+#endif
+ SCMP_SYS(mkdir),
+ SCMP_SYS(mlockall),
+ SCMP_SYS(mmap),
+#ifdef __NR_mmap2
+ SCMP_SYS(mmap2),
+#endif
+ SCMP_SYS(mprotect),
+ SCMP_SYS(mremap),
+ SCMP_SYS(munmap),
+ SCMP_SYS(open),
+ SCMP_SYS(openat),
+ SCMP_SYS(poll),
+ SCMP_SYS(prctl),
+ SCMP_SYS(read),
+ SCMP_SYS(rename),
+ SCMP_SYS(rt_sigaction),
+ SCMP_SYS(rt_sigprocmask),
+ SCMP_SYS(rt_sigreturn),
+#ifdef __NR_sigreturn
+ SCMP_SYS(sigreturn),
+#endif
+ SCMP_SYS(set_robust_list),
+ SCMP_SYS(set_thread_area),
+ SCMP_SYS(set_tid_address),
+ SCMP_SYS(stat),
+#ifdef __NR_stat64
+ SCMP_SYS(stat64),
+#endif
+ SCMP_SYS(time),
+ SCMP_SYS(uname),
+ SCMP_SYS(write),
+ SCMP_SYS(exit_group),
+ SCMP_SYS(exit),
+
+ // socket syscalls
+ SCMP_SYS(accept4),
+ SCMP_SYS(bind),
+ SCMP_SYS(connect),
+ SCMP_SYS(getsockname),
+ SCMP_SYS(getsockopt),
+ SCMP_SYS(listen),
+#if __NR_recv >= 0
+ /* This is a kludge; It's necessary on 64-bit with libseccomp 1.0.0; I
+ * don't know if other 64-bit or other versions require it. */
+ SCMP_SYS(recv),
+#endif
+ SCMP_SYS(recvmsg),
+#if __NR_send >= 0
+ SCMP_SYS(send),
+#endif
+ SCMP_SYS(sendto),
+ SCMP_SYS(setsockopt),
+ SCMP_SYS(socket),
+ SCMP_SYS(socketpair),
+
+ // TODO: remove when accept4 is fixed
+#ifdef __NR_socketcall
+ SCMP_SYS(socketcall),
+#endif
+
+ SCMP_SYS(recvfrom),
+ SCMP_SYS(unlink)
+};
+
+/**
+ * Function responsible for setting up and enabling a global syscall filter.
+ * The function is a prototype developed for stage 1 of sandboxing Tor.
+ * Returns 0 on success.
+ */
+static int
+install_glob_syscall_filter(void)
+{
+ int rc = 0, i, filter_size;
+ scmp_filter_ctx ctx;
+
+ ctx = seccomp_init(SCMP_ACT_TRAP);
+ if (ctx == NULL) {
+ log_err(LD_BUG,"(Sandbox) failed to initialise libseccomp context");
+ rc = -1;
+ goto end;
+ }
+
+ if (general_filter != NULL) {
+ filter_size = sizeof(general_filter) / sizeof(general_filter[0]);
+ } else {
+ filter_size = 0;
+ }
+
+ // add general filters
+ for (i = 0; i < filter_size; i++) {
+ rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, general_filter[i], 0);
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add syscall index %d, "
+ "received libseccomp error %d", i, rc);
+ goto end;
+ }
+ }
+
+ rc = seccomp_load(ctx);
+
+ end:
+ seccomp_release(ctx);
+ return (rc < 0 ? -rc : rc);
+}
+
+/** Additional file descriptor to use when logging seccomp2 failures */
+static int sigsys_debugging_fd = -1;
+
+/** Use the file descriptor <b>fd</b> to log seccomp2 failures. */
+static void
+sigsys_set_debugging_fd(int fd)
+{
+ sigsys_debugging_fd = fd;
+}
+
+/**
+ * Function called when a SIGSYS is caught by the application. It notifies the
+ * user that an error has occurred and either terminates or allows the
+ * application to continue execution, based on the DEBUGGING_CLOSE symbol.
+ */
+static void
+sigsys_debugging(int nr, siginfo_t *info, void *void_context)
+{
+ ucontext_t *ctx = (ucontext_t *) (void_context);
+ char message[256];
+ int rv = 0, syscall, length, err;
+ (void) nr;
+
+ if (info->si_code != SYS_SECCOMP)
+ return;
+
+ if (!ctx)
+ return;
+
+ syscall = ctx->uc_mcontext.gregs[REG_SYSCALL];
+
+ strlcpy(message, "\n\n(Sandbox) Caught a bad syscall attempt (syscall 0x",
+ sizeof(message));
+ (void) format_hex_number_sigsafe(syscall, message+strlen(message),
+ sizeof(message)-strlen(message));
+ strlcat(message, ")\n", sizeof(message));
+ length = strlen(message);
+
+ err = 0;
+ if (sigsys_debugging_fd >= 0) {
+ rv = write(sigsys_debugging_fd, message, length);
+ err += rv != length;
+ }
+
+ rv = write(STDOUT_FILENO, message, length);
+ err += rv != length;
+
+ if (err)
+ _exit(2);
+
+#if defined(DEBUGGING_CLOSE)
+ _exit(1);
+#endif // DEBUGGING_CLOSE
+}
+
+/**
+ * Function that adds a handler for SIGSYS, which is the signal thrown
+ * when the application is issuing a syscall which is not allowed. The
+ * main purpose of this function is to help with debugging by identifying
+ * filtered syscalls.
+ */
+static int
+install_sigsys_debugging(void)
+{
+ struct sigaction act;
+ sigset_t mask;
+
+ memset(&act, 0, sizeof(act));
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGSYS);
+
+ act.sa_sigaction = &sigsys_debugging;
+ act.sa_flags = SA_SIGINFO;
+ if (sigaction(SIGSYS, &act, NULL) < 0) {
+ log_err(LD_BUG,"(Sandbox) Failed to register SIGSYS signal handler");
+ return -1;
+ }
+
+ if (sigprocmask(SIG_UNBLOCK, &mask, NULL)) {
+ log_err(LD_BUG,"(Sandbox) Failed call to sigprocmask()");
+ return -2;
+ }
+
+ return 0;
+}
+#endif // USE_LIBSECCOMP
+
+#ifdef USE_LIBSECCOMP
+/**
+ * Initialises the syscall sandbox filter for any linux architecture, taking
+ * into account various available features for different linux flavours.
+ */
+static int
+initialise_libseccomp_sandbox(void)
+{
+ if (install_sigsys_debugging())
+ return -1;
+
+ if (install_glob_syscall_filter())
+ return -2;
+
+ return 0;
+}
+
+#endif // USE_LIBSECCOMP
+
+/**
+ * Enables the stage 1 general sandbox. It applies a syscall filter which does
+ * not restrict any Tor features. The filter is representative for the whole
+ * application.
+ */
+int
+tor_global_sandbox(void)
+{
+
+#if defined(USE_LIBSECCOMP)
+ return initialise_libseccomp_sandbox();
+
+#elif defined(_WIN32)
+ log_warn(LD_BUG,"Windows sandboxing is not implemented. The feature is "
+ "currently disabled.");
+ return 0;
+
+#elif defined(TARGET_OS_MAC)
+ log_warn(LD_BUG,"Mac OSX sandboxing is not implemented. The feature is "
+ "currently disabled");
+ return 0;
+#else
+ log_warn(LD_BUG,"Sandboxing is not implemented for your platform. The "
+ "feature is currently disabled");
+ return 0;
+#endif
+}
+
+/** Use <b>fd</b> to log non-survivable sandbox violations. */
+void
+sandbox_set_debugging_fd(int fd)
+{
+#ifdef USE_LIBSECCOMP
+ sigsys_set_debugging_fd(fd);
+#else
+ (void)fd;
+#endif
+}
+
diff --git a/src/common/sandbox.h b/src/common/sandbox.h
new file mode 100644
index 000000000..bd6f0cfb4
--- /dev/null
+++ b/src/common/sandbox.h
@@ -0,0 +1,55 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file sandbox.h
+ * \brief Header file for sandbox.c.
+ **/
+
+#ifndef SANDBOX_H_
+#define SANDBOX_H_
+
+#ifndef SYS_SECCOMP
+
+/**
+ * Used by SIGSYS signal handler to check if the signal was issued due to a
+ * seccomp2 filter violation.
+ */
+#define SYS_SECCOMP 1
+
+#endif
+
+/**
+ * Linux definitions
+ */
+#ifdef __linux__
+
+#define __USE_GNU
+#include <sys/ucontext.h>
+
+/**
+ * Linux 32 bit definitions
+ */
+#if defined(__i386__)
+
+#define REG_SYSCALL REG_EAX
+
+/**
+ * Linux 64 bit definitions
+ */
+#elif defined(__x86_64__)
+
+#define REG_SYSCALL REG_RAX
+
+#endif
+
+#endif // __linux__
+
+void sandbox_set_debugging_fd(int fd);
+int tor_global_sandbox(void);
+
+#endif /* SANDBOX_H_ */
+
diff --git a/src/common/testsupport.h b/src/common/testsupport.h
new file mode 100644
index 000000000..4a4f50b69
--- /dev/null
+++ b/src/common/testsupport.h
@@ -0,0 +1,80 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_TESTSUPPORT_H
+#define TOR_TESTSUPPORT_H
+
+#ifdef TOR_UNIT_TESTS
+#define STATIC
+#else
+#define STATIC static
+#endif
+
+/** Quick and dirty macros to implement test mocking.
+ *
+ * To use them, suppose that you have a function you'd like to mock
+ * with the signature "void writebuf(size_t n, char *buf)". You can then
+ * declare the function as:
+ *
+ * MOCK_DECL(void, writebuf, (size_t n, char *buf));
+ *
+ * and implement it as:
+ *
+ * MOCK_IMPL(void
+ * writebuf,(size_t n, char *buf)
+ * {
+ * ...
+ * }
+ *
+ * For the non-testing build, this will expand simply into:
+ *
+ * void writebuf(size_t n, char *buf);
+ * void
+ * writebuf(size_t n, char *buf)
+ * {
+ * ...
+ * }
+ *
+ * But for the testing case, it will expand into:
+ *
+ * void writebuf__real(size_t n, char *buf);
+ * extern void (*writebuf)(size_t n, char *buf);
+ *
+ * void (*writebuf)(size_t n, char *buf) = writebuf__real;
+ * void
+ * writebuf__real(size_t n, char *buf)
+ * {
+ * ...
+ * }
+ *
+ * This is not a great mocking system! It is deliberately "the simplest
+ * thing that could work", and pays for its simplicity in its lack of
+ * features, and in its uglification of the Tor code. Replacing it with
+ * something clever would be a fine thing.
+ *
+ * @{ */
+#ifdef TOR_UNIT_TESTS
+#define MOCK_DECL(rv, funcname, arglist) \
+ rv funcname ##__real arglist; \
+ extern rv(*funcname) arglist
+#define MOCK_IMPL(rv, funcname, arglist) \
+ rv(*funcname) arglist = funcname ##__real; \
+ rv funcname ##__real arglist
+#define MOCK(func, replacement) \
+ do { \
+ (func) = (replacement); \
+ } while (0)
+#define UNMOCK(func) \
+ do { \
+ func = func ##__real; \
+ } while (0)
+#else
+#define MOCK_DECL(rv, funcname, arglist) \
+ rv funcname arglist
+#define MOCK_IMPL(rv, funcname, arglist) \
+ rv funcname arglist
+#endif
+/** @} */
+
+#endif
+
diff --git a/src/common/torlog.h b/src/common/torlog.h
index 8675d7b6e..ecd7e121e 100644
--- a/src/common/torlog.h
+++ b/src/common/torlog.h
@@ -114,12 +114,6 @@ typedef struct log_severity_list_t {
log_domain_mask_t masks[LOG_DEBUG-LOG_ERR+1];
} log_severity_list_t;
-#ifdef LOG_PRIVATE
-/** Given a severity, yields an index into log_severity_list_t.masks to use
- * for that severity. */
-#define SEVERITY_MASK_IDX(sev) ((sev) - LOG_ERR)
-#endif
-
/** Callback type used for add_callback_log. */
typedef void (*log_callback)(int severity, uint32_t domain, const char *msg);
@@ -142,6 +136,7 @@ int get_min_log_level(void);
void switch_logs_debug(void);
void logs_free_all(void);
void add_temp_log(int min_severity);
+int get_err_logging_fd(void);
void close_temp_logs(void);
void rollback_log_changes(void);
void mark_logs_temp(void);
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 6bd557b8c..df706b001 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -48,9 +48,6 @@
#include "compat_libevent.h"
#endif
-#define CRYPTO_PRIVATE /* to import prototypes from crypto.h */
-#define TORTLS_PRIVATE
-
#include "crypto.h"
#include "tortls.h"
#include "util.h"
diff --git a/src/common/util.c b/src/common/util.c
index 651554ed2..6e14a58dd 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1223,17 +1223,14 @@ escaped(const char *s)
return escaped_val_;
}
-/** Escape every ";" or "\" character of <b>string</b>. Use
- * <b>escape_char</b> as the character to use for escaping.
- * The returned string is allocated on the heap and it's the
- * responsibility of the caller to free it. */
+/** Return a newly allocated string equal to <b>string</b>, except that every
+ * character in <b>chars_to_escape</b> is preceded by a backslash. */
char *
-tor_escape_str_for_socks_arg(const char *string)
+tor_escape_str_for_pt_args(const char *string, const char *chars_to_escape)
{
char *new_string = NULL;
char *new_cp = NULL;
size_t length, new_length;
- static const char *chars_to_escape = ";\\";
tor_assert(string);
@@ -2219,9 +2216,9 @@ write_bytes_to_file_impl(const char *fname, const char *str, size_t len,
/** As write_str_to_file, but does not assume a NUL-terminated
* string. Instead, we write <b>len</b> bytes, starting at <b>str</b>. */
-int
-write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin)
+MOCK_IMPL(int,
+write_bytes_to_file,(const char *fname, const char *str, size_t len,
+ int bin))
{
return write_bytes_to_file_impl(fname, str, len,
OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT));
@@ -3382,13 +3379,13 @@ tor_join_win_cmdline(const char *argv[])
}
/**
- * Helper function to output hex numbers, called by
- * format_helper_exit_status(). This writes the hexadecimal digits of x into
- * buf, up to max_len digits, and returns the actual number of digits written.
- * If there is insufficient space, it will write nothing and return 0.
+ * Helper function to output hex numbers from within a signal handler.
+ *
+ * Writes the nul-terminated hexadecimal digits of <b>x</b> into a buffer
+ * <b>buf</b> of size <b>buf_len</b>, and return the actual number of digits
+ * written, not counting the terminal NUL.
*
- * This function DOES NOT add a terminating NUL character to its output: be
- * careful!
+ * If there is insufficient space, write nothing and return 0.
*
* This accepts an unsigned int because format_helper_exit_status() needs to
* call it with a signed int and an unsigned char, and since the C standard
@@ -3403,15 +3400,14 @@ tor_join_win_cmdline(const char *argv[])
* arbitrary C functions.
*/
int
-format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
- int max_len)
+format_hex_number_sigsafe(unsigned int x, char *buf, int buf_len)
{
int len;
unsigned int tmp;
char *cur;
/* Sanity check */
- if (!buf || max_len <= 0)
+ if (!buf || buf_len <= 1)
return 0;
/* How many chars do we need for x? */
@@ -3427,7 +3423,7 @@ format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
}
/* Bail if we would go past the end of the buffer */
- if (len > max_len)
+ if (len+1 > buf_len)
return 0;
/* Point to last one */
@@ -3439,10 +3435,13 @@ format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
x >>= 4;
} while (x != 0 && cur >= buf);
+ buf[len] = '\0';
+
/* Return len */
return len;
}
+#ifndef _WIN32
/** Format <b>child_state</b> and <b>saved_errno</b> as a hex string placed in
* <b>hex_errno</b>. Called between fork and _exit, so must be signal-handler
* safe.
@@ -3458,7 +3457,7 @@ format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
* On success return the number of characters added to hex_errno, not counting
* the terminating NUL; return -1 on error.
*/
-int
+STATIC int
format_helper_exit_status(unsigned char child_state, int saved_errno,
char *hex_errno)
{
@@ -3489,8 +3488,8 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
cur = hex_errno;
/* Emit child_state */
- written = format_hex_number_for_helper_exit_status(child_state,
- cur, left);
+ written = format_hex_number_sigsafe(child_state, cur, left);
+
if (written <= 0)
goto err;
@@ -3519,8 +3518,7 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
}
/* Emit unsigned_errno */
- written = format_hex_number_for_helper_exit_status(unsigned_errno,
- cur, left);
+ written = format_hex_number_sigsafe(unsigned_errno, cur, left);
if (written <= 0)
goto err;
@@ -3551,6 +3549,7 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
done:
return res;
}
+#endif
/* Maximum number of file descriptors, if we cannot get it via sysconf() */
#define DEFAULT_MAX_FD 256
@@ -3967,9 +3966,9 @@ tor_spawn_background(const char *const filename, const char **argv,
* <b>process_handle</b>.
* If <b>also_terminate_process</b> is true, also terminate the
* process of the process handle. */
-void
-tor_process_handle_destroy(process_handle_t *process_handle,
- int also_terminate_process)
+MOCK_IMPL(void,
+tor_process_handle_destroy,(process_handle_t *process_handle,
+ int also_terminate_process))
{
if (!process_handle)
return;
@@ -4478,9 +4477,9 @@ stream_status_to_string(enum stream_status stream_status)
/** Return a smartlist containing lines outputted from
* <b>handle</b>. Return NULL on error, and set
* <b>stream_status_out</b> appropriately. */
-smartlist_t *
-tor_get_lines_from_handle(HANDLE *handle,
- enum stream_status *stream_status_out)
+MOCK_IMPL(smartlist_t *,
+tor_get_lines_from_handle, (HANDLE *handle,
+ enum stream_status *stream_status_out))
{
int pos;
char stdout_buf[600] = {0};
@@ -4568,8 +4567,9 @@ log_from_handle(HANDLE *pipe, int severity)
/** Return a smartlist containing lines outputted from
* <b>handle</b>. Return NULL on error, and set
* <b>stream_status_out</b> appropriately. */
-smartlist_t *
-tor_get_lines_from_handle(FILE *handle, enum stream_status *stream_status_out)
+MOCK_IMPL(smartlist_t *,
+tor_get_lines_from_handle, (FILE *handle,
+ enum stream_status *stream_status_out))
{
enum stream_status stream_status;
char stdout_buf[400];
diff --git a/src/common/util.h b/src/common/util.h
index 5596378bc..090243ea2 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -15,6 +15,7 @@
#include "torint.h"
#include "compat.h"
#include "di_ops.h"
+#include "testsupport.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
@@ -230,7 +231,8 @@ int tor_digest256_is_zero(const char *digest);
char *esc_for_log(const char *string) ATTR_MALLOC;
const char *escaped(const char *string);
-char *tor_escape_str_for_socks_arg(const char *string);
+char *tor_escape_str_for_pt_args(const char *string,
+ const char *chars_to_escape);
struct smartlist_t;
int tor_vsscanf(const char *buf, const char *pattern, va_list ap) \
@@ -353,8 +355,9 @@ FILE *fdopen_file(open_file_t *file_data);
int finish_writing_to_file(open_file_t *file_data);
int abort_writing_to_file(open_file_t *file_data);
int write_str_to_file(const char *fname, const char *str, int bin);
-int write_bytes_to_file(const char *fname, const char *str, size_t len,
- int bin);
+MOCK_DECL(int,
+write_bytes_to_file,(const char *fname, const char *str, size_t len,
+ int bin));
/** An ad-hoc type to hold a string of characters and a count; used by
* write_chunks_to_file. */
typedef struct sized_chunk_t {
@@ -490,18 +493,21 @@ FILE *tor_process_get_stdout_pipe(process_handle_t *process_handle);
#endif
#ifdef _WIN32
-struct smartlist_t *
-tor_get_lines_from_handle(HANDLE *handle,
- enum stream_status *stream_status);
+MOCK_DECL(struct smartlist_t *,
+tor_get_lines_from_handle,(HANDLE *handle,
+ enum stream_status *stream_status));
#else
-struct smartlist_t *
-tor_get_lines_from_handle(FILE *handle,
- enum stream_status *stream_status);
+MOCK_DECL(struct smartlist_t *,
+tor_get_lines_from_handle,(FILE *handle,
+ enum stream_status *stream_status));
#endif
-int tor_terminate_process(process_handle_t *process_handle);
-void tor_process_handle_destroy(process_handle_t *process_handle,
- int also_terminate_process);
+int
+tor_terminate_process(process_handle_t *process_handle);
+
+MOCK_DECL(void,
+tor_process_handle_destroy,(process_handle_t *process_handle,
+ int also_terminate_process));
/* ===== Insecure rng */
typedef struct tor_weak_rng_t {
@@ -517,12 +523,13 @@ int32_t tor_weak_random_range(tor_weak_rng_t *rng, int32_t top);
* <b>n</b> */
#define tor_weak_random_one_in_n(rng, n) (0==tor_weak_random_range((rng),(n)))
+int format_hex_number_sigsafe(unsigned int x, char *buf, int max_len);
+
#ifdef UTIL_PRIVATE
/* Prototypes for private functions only used by util.c (and unit tests) */
-int format_hex_number_for_helper_exit_status(unsigned int x, char *buf,
- int max_len);
-int format_helper_exit_status(unsigned char child_state,
+#ifndef _WIN32
+STATIC int format_helper_exit_status(unsigned char child_state,
int saved_errno, char *hex_errno);
/* Space for hex values of child state, a slash, saved_errno (with
@@ -531,6 +538,8 @@ int format_helper_exit_status(unsigned char child_state,
1 + sizeof(int) * 2 + 1)
#endif
+#endif
+
const char *libor_get_digests(void);
#endif
diff --git a/src/config/geoip b/src/config/geoip
index 7f134c0a8..f7a5c084a 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on June 5 2013 Maxmind GeoLite Country
+# Last updated based on August 7 2013 Maxmind GeoLite Country
# Visit the following URL for details on the conversion:
# https://gitweb.torproject.org/tor.git/blob/HEAD:/src/config/README.geoip
16777216,16777471,AU
@@ -183,9 +183,7 @@
49807360,50331647,SE
50331648,57083940,US
57083941,57083941,BE
-57083942,68305407,US
-68305408,68305919,MX
-68305920,68965375,US
+57083942,68965375,US
68965376,68965631,CA
68965632,69156927,US
69156928,69156935,US
@@ -254,9 +252,8 @@
84049920,84082687,RO
84082688,84148223,RU
84148224,84410367,DE
-84410368,84433919,RU
-84433920,84434176,UA
-84434177,84443135,RU
+84410368,84434943,RU
+84434944,84443135,IT
84443136,84451327,LB
84451328,84457471,RU
84457472,84459519,ES
@@ -271,14 +268,7 @@
84558080,84558335,GB
84558336,84561215,NL
84561216,84561247,US
-84561248,84566799,NL
-84566800,84566807,US
-84566808,84570503,NL
-84570504,84570511,US
-84570512,84570519,AU
-84570520,84573983,NL
-84573984,84574015,US
-84574016,84574207,NL
+84561248,84574207,NL
84574208,84576255,FR
84576256,84582399,GB
84582400,84590591,DE
@@ -307,7 +297,10 @@
85360640,85362687,IL
85362688,85364735,GB
85364736,85366783,DE
-85366784,85367807,CZ
+85366784,85367039,CZ
+85367040,85367295,RU
+85367296,85367551,SK
+85367552,85367807,CZ
85367808,85368831,UA
85368832,85377023,RS
85377024,85385215,IR
@@ -392,7 +385,9 @@
86448856,86448859,PT
86448860,86449363,FR
86449364,86449367,DE
-86449368,86453836,FR
+86449368,86452671,FR
+86452672,86452735,GB
+86452736,86453836,FR
86453837,86453838,PT
86453839,86454335,FR
86454336,86454343,DE
@@ -402,17 +397,19 @@
86456352,86456367,CH
86456368,86457087,FR
86457088,86457091,DE
-86457092,86467999,FR
+86457092,86467320,FR
+86467321,86467321,FI
+86467322,86467999,FR
86468000,86468003,PL
86468004,86468447,FR
86468448,86468479,CZ
-86468480,86469691,FR
+86468480,86469183,FR
+86469184,86469247,GB
+86469248,86469691,FR
86469692,86469695,DE
86469696,86470731,FR
86470732,86470735,BE
-86470736,86471223,FR
-86471224,86471227,ES
-86471228,86474307,FR
+86470736,86474307,FR
86474308,86474311,DE
86474312,86474475,FR
86474476,86474479,DE
@@ -478,12 +475,14 @@
86833152,86835199,GB
86835200,86837247,DE
86837248,86839295,ES
-86839296,86849535,GB
+86839296,86843391,GB
+86847488,86849535,GB
86849536,86851583,CZ
86851584,86853631,RU
86853632,86854655,NL
86854656,86859775,RU
-86859776,86865919,DE
+86859776,86863871,DE
+86863872,86865919,RU
86865920,86867967,EE
86867968,86872063,JO
86872064,86874111,GB
@@ -550,9 +549,9 @@
87672832,87674879,CH
87674880,87676927,AE
87676928,87678975,RU
-87678976,87680063,NL
-87680064,87680511,ES
-87680512,87681023,NL
+87678976,87679103,NL
+87679104,87679231,ES
+87679232,87681023,NL
87681024,87683071,RU
87683072,87685119,SE
87685120,87687167,NL
@@ -585,7 +584,8 @@
88020992,88023039,FR
88023040,88031231,TR
88031232,88047615,KZ
-88047616,88049663,LU
+88047616,88048639,US
+88048640,88049663,LU
88049664,88051711,IT
88051712,88053759,GB
88053760,88055807,RU
@@ -633,8 +633,7 @@
90456064,90472447,RU
90472448,90476543,DE
90476544,90478591,FR
-90478592,90479103,GB
-90479104,90480639,VG
+90478592,90480639,VG
90480640,90482687,YE
90482688,90484735,SA
90484736,90488831,NO
@@ -665,7 +664,11 @@
90705920,90707967,CZ
90707968,90710015,IT
90710016,90718207,UA
-90718208,90720255,EU
+90718208,90718719,DE
+90718720,90719231,FR
+90719232,90719487,AT
+90719488,90719999,EU
+90720000,90720255,GB
90720256,90722303,IQ
90722304,90724351,FI
90724352,90726399,CH
@@ -726,11 +729,15 @@
92725248,92733439,SY
92733440,92734735,FR
92734736,92734739,DE
-92734740,92736511,FR
-92736512,92737023,GB
-92737024,92749067,FR
+92734740,92738719,FR
+92738720,92738727,GB
+92738728,92747711,FR
+92747712,92747775,GB
+92747776,92749067,FR
92749068,92749071,GB
-92749072,92786827,FR
+92749072,92757311,FR
+92757312,92757375,ES
+92757376,92786827,FR
92786828,92786831,IT
92786832,92798975,FR
92798976,93323263,RU
@@ -752,7 +759,8 @@
93417472,93419519,IR
93419520,93421567,IT
93421568,93425663,DE
-93425664,93427711,GI
+93425664,93426687,GI
+93426688,93427711,DE
93427712,93429759,NO
93429760,93431807,RU
93431808,93433855,ES
@@ -773,8 +781,8 @@
93681664,93683711,UA
93683712,93685759,AT
93685760,93687807,BE
-93687808,93691391,RU
-93691392,93691903,GB
+93687808,93691647,RU
+93691648,93691903,GB
93691904,93693951,PL
93693952,93695999,IE
93696000,93700095,FR
@@ -783,10 +791,7 @@
93704192,93708287,UA
93708288,93712383,DE
93712384,93714431,HU
-93714432,93714943,NL
-93714944,93715455,GB
-93715456,93715967,CA
-93715968,93716479,NL
+93714432,93716479,NL
93716480,93749247,GB
93749248,93753343,IT
93753344,93765631,GB
@@ -807,9 +812,7 @@
93911040,93913087,AE
93913088,93916527,NL
93916528,93916543,US
-93916544,93918103,NL
-93918104,93918111,US
-93918112,93919263,NL
+93916544,93919263,NL
93919264,93919279,US
93919280,93919487,NL
93919488,93919551,US
@@ -904,8 +907,7 @@
95367168,95369215,IT
95369216,95371263,GB
95371264,95374591,IT
-95374592,95374847,EU
-95374848,95375359,LY
+95374592,95375359,EU
95375360,95377407,NL
95377408,95387647,RU
95387648,95420415,DE
@@ -951,7 +953,9 @@
96169984,96174079,FR
96174080,96206847,HU
96206848,96272383,RU
-96272384,96288767,PA
+96272384,96280575,PA
+96280576,96284671,RU
+96284672,96288767,PA
96288768,96337919,RU
96337920,96403455,IR
96403456,96468991,AZ
@@ -963,7 +967,7 @@
96897024,96899071,GB
96899072,96903167,AT
96903168,96911359,IR
-96911360,96919551,NL
+96911360,96919551,FR
96919552,96923647,IT
96923648,96925695,JO
96925696,96960511,GB
@@ -1019,7 +1023,9 @@
100139008,100204543,UA
100204544,100237311,PT
100237312,100245503,IT
-100245504,100247551,SE
+100245504,100246527,SE
+100246528,100246783,DE
+100246784,100247551,SE
100247552,100249599,CH
100249600,100253695,SI
100253696,100261887,RU
@@ -1034,7 +1040,6 @@
100329472,100331519,RU
100331520,100335615,TR
100335616,100401151,KZ
-100401152,100532223,DE
100532224,100564991,RO
100564992,100568063,SE
100568064,100568319,FR
@@ -1067,9 +1072,7 @@
135432192,135434239,CA
135434240,135441407,US
135441408,135441663,CA
-135441664,135603711,US
-135603712,135604223,CA
-135604224,135607039,US
+135441664,135607039,US
135607040,135607295,CA
135607296,135776255,US
135776256,135776511,GU
@@ -1078,21 +1081,19 @@
135794688,136237055,US
136237056,136239103,CA
136239104,136415487,US
-136415488,136415743,CA
+136415488,136415665,CA
+136415666,136415666,FR
+136415667,136415743,CA
136415744,136699903,US
136699904,136703999,A2
136704000,152305663,US
152305664,152338431,GB
152338432,167772159,US
-184549376,202706431,US
-202706432,202706943,PR
-202706944,202935551,US
+184549376,202935551,US
202935552,202935807,PR
202935808,203658751,US
203658752,203658815,VI
-203658816,204046335,US
-204046336,204046847,PR
-204046848,204047391,US
+203658816,204047391,US
204047392,204047423,VI
204047424,204047487,US
204047488,204047503,VI
@@ -1282,7 +1283,9 @@
289748992,289752063,ES
289752064,289760255,US
289760256,289763327,DE
-289763328,290264063,US
+289763328,289959423,US
+289959424,289959935,DK
+289959936,290264063,US
290264064,290264575,AT
290264576,290267135,US
290267136,290269183,NL
@@ -1314,7 +1317,8 @@
290302464,290302975,US
290302976,290303999,IN
290304000,290305023,IT
-290305024,290308095,US
+290305024,290306047,US
+290306048,290308095,DK
290308096,290310143,DE
290310144,290312191,US
290312192,290314239,BE
@@ -1374,7 +1378,11 @@
387055616,387121151,PR
387121152,387825663,US
387825664,387833855,CA
-387833856,392167423,US
+387833856,391110655,US
+391110656,391110911,IL
+391110912,391111167,GB
+391111168,393215999,US
+398458880,400556031,US
402653184,405012479,US
405012480,405143551,CA
405143552,405180415,US
@@ -1435,7 +1443,7 @@
410648576,410714111,CA
410714112,411164671,US
411164672,411168767,CA
-411172864,411303935,US
+411168768,411303935,US
411303936,411369471,NL
411369472,411435007,TR
411435008,411500543,DE
@@ -1523,9 +1531,7 @@
436207616,452984831,US
452984832,452985855,JP
452985856,452986879,MY
-452986880,452987391,SG
-452987392,452987647,BD
-452987648,452987903,SG
+452986880,452987903,SG
452987904,452988927,VN
452988928,452993023,US
452993024,452997119,JP
@@ -1593,7 +1599,6 @@
459540480,459541503,JP
459541504,459542527,IN
459542528,459544575,HK
-459544576,459545599,AU
459545600,459547647,JP
459548672,459550719,TH
459550720,459554815,JP
@@ -1798,27 +1803,29 @@
520486912,520488959,NL
520488960,520489983,IT
520489984,520490495,RU
-520490496,520490751,IT
+520490496,520490751,RO
520490752,520491007,RU
-520491008,520493567,GB
+520491008,520491775,GB
+520491776,520492031,IE
+520492032,520493567,GB
520493568,520494079,GB
520494080,520494591,IT
520494592,520494847,CH
520494848,520495103,DK
-520495104,520495615,DE
-520495616,520495871,IT
+520495104,520495871,IT
520495872,520496383,DE
-520496384,520497151,IT
+520496384,520496895,IT
+520496896,520497151,ES
520497152,520497407,FR
520497408,520497663,IT
520497664,520498175,FR
520498176,520498431,CH
520498432,520498687,SE
-520498688,520499711,FR
-520499712,520500223,DE
-520500224,520500479,IT
-520500480,520501247,DE
-520501248,520501759,IT
+520498688,520499199,FR
+520499200,520500223,IT
+520500224,520500479,LU
+520500480,520500735,DE
+520500736,520501759,IT
520501760,520503295,GB
520503296,520505343,PL
520505344,520507391,GB
@@ -1908,11 +1915,11 @@
521555968,521558015,NL
521558016,521560063,CY
521560064,521562111,PL
-521562112,521562911,DE
-521562912,521564159,GB
+521562112,521564159,GB
521564160,521565183,GR
521565184,521565439,GB
-521565440,521566207,GR
+521565440,521565695,US
+521565696,521566207,GR
521566208,521568255,LU
521568256,521601023,PT
521601024,521666559,RU
@@ -2065,10 +2072,7 @@
523010048,523014143,IL
523014144,523018239,ES
523018240,523022335,IT
-523022336,523024895,RU
-523024896,523025407,BZ
-523025408,523025919,RU
-523025920,523026431,NL
+523022336,523026431,RU
523026432,523030527,TR
523030528,523034623,FR
523034624,523038719,SE
@@ -2189,23 +2193,29 @@
529596416,529661951,TR
529661952,529727487,GE
529727488,529793023,HR
-529793024,529827839,RU
+529793024,529825791,RU
+529825792,529826815,CZ
+529826816,529827839,RU
529827840,529828863,CZ
529828864,529835007,RU
529835008,529836031,KG
-529836032,529836543,UA
-529836544,529837055,IL
+529836032,529837055,CZ
529837056,529839103,RU
-529839104,529839615,UA
-529839616,529840127,CY
+529839104,529840127,CZ
529840128,529841151,RU
529841152,529842175,UA
529842176,529843199,IN
-529843200,529844735,RU
-529844736,529845247,UA
+529843200,529844223,RU
+529844224,529845247,CZ
529845248,529846271,UZ
-529846272,529848319,RU
-529848320,529853439,CZ
+529846272,529847295,CZ
+529847296,529848319,RU
+529848320,529848575,NL
+529848576,529849087,CZ
+529849088,529849343,NL
+529849344,529850111,CZ
+529850112,529850367,RU
+529850368,529853439,CZ
529853440,529856511,RU
529856512,529857535,KZ
529857536,529858559,UA
@@ -2248,9 +2258,7 @@
531263488,531265535,RU
531265536,531267583,GB
531267584,531275775,UA
-531275776,531276799,US
-531276800,531277311,GB
-531277312,531277823,US
+531275776,531277823,US
531277824,531279871,RU
531279872,531281919,CZ
531281920,531283967,RU
@@ -2266,13 +2274,9 @@
531351552,531355647,NL
531355648,531357695,IR
531357696,531361791,HU
-531361792,531365887,CH
-531365888,531366399,DE
-531366400,531367935,CH
+531361792,531367935,CH
531367936,531369983,DE
-531369984,531371007,CH
-531371008,531371519,US
-531371520,531372031,JP
+531369984,531372031,CH
531372032,531372287,DE
531372288,531372543,CH
531372544,531372799,DE
@@ -2295,9 +2299,7 @@
531428584,531428591,IT
531428592,531428967,GB
531428968,531428975,IT
-531428976,531429023,GB
-531429024,531429031,IT
-531429032,531429135,GB
+531428976,531429135,GB
531429136,531429143,IT
531429144,531429167,GB
531429168,531429175,IT
@@ -2305,18 +2307,20 @@
531429240,531429247,IT
531429248,531429407,GB
531429408,531429415,IT
-531429416,531429879,GB
+531429416,531429447,GB
+531429448,531429455,IT
+531429456,531429879,GB
531429880,531429887,IT
-531429888,531429911,GB
-531429912,531429919,IT
-531429920,531430079,GB
+531429888,531430007,GB
+531430008,531430015,IT
+531430016,531430079,GB
531430080,531430087,IT
531430088,531430319,GB
531430320,531430327,IT
-531430328,531430391,GB
-531430392,531430399,IT
-531430400,531430663,GB
-531430664,531430671,IT
+531430328,531430607,GB
+531430608,531430615,IT
+531430616,531430655,GB
+531430656,531430671,IT
531430672,531430823,GB
531430824,531430831,IT
531430832,531430847,GB
@@ -2349,11 +2353,7 @@
532152320,532168703,DE
532168704,532185087,NL
532185088,532201471,IR
-532201472,532211711,RU
-532211712,532212223,LU
-532212224,532214783,RU
-532214784,532215295,AE
-532215296,532221951,RU
+532201472,532221951,RU
532221952,532223999,IT
532224000,532226047,NO
532226048,532234239,GB
@@ -2378,11 +2378,12 @@
532328448,532330495,PS
532330496,532332543,CZ
532332544,532340735,PL
-532340736,532348671,GB
+532340736,532344319,GB
+532344320,532344575,FR
+532344576,532348671,GB
532348672,532348927,NL
532348928,532365311,PL
-532365312,532365823,AU
-532365824,532366335,DE
+532365312,532366335,DE
532366336,532367359,GB
532367360,532373503,DE
532373504,532375551,RU
@@ -2426,7 +2427,8 @@
532791296,532793343,LT
532793344,532795391,SE
532795392,532797439,CH
-532797440,532799487,IE
+532797440,532799231,IE
+532799232,532799487,GB
532799488,532801535,ES
532801536,532803583,DK
532803584,532805631,FR
@@ -2542,11 +2544,15 @@
534378496,534380543,FR
534380544,534511615,AE
534511616,534512639,BZ
-534512640,534513151,DE
+534512640,534512895,NL
+534512896,534513151,DE
534513152,534513215,BS
534513216,534513279,VG
-534513280,534513407,NL
-534513408,534519295,DE
+534513280,534513663,NL
+534513664,534514687,US
+534514688,534519039,DE
+534519040,534519263,NL
+534519264,534519295,IT
534519296,534519327,NL
534519328,534519359,PK
534519360,534519391,PE
@@ -2555,8 +2561,8 @@
534519456,534519487,BR
534519488,534519519,MX
534519520,534519551,CN
-534519552,534519807,GB
-534519808,534523903,CZ
+534519552,534521855,US
+534521856,534523903,DE
534523904,534527999,LT
534528000,534544383,DE
534544384,534546431,RO
@@ -2610,9 +2616,9 @@
539631040,539631047,IT
539631048,539656191,US
539656192,539660287,IN
-539660288,540711935,US
-540711936,540712447,NL
-540712448,540737535,US
+539660288,539671103,US
+539671104,539671135,JP
+539671136,540737535,US
540737536,540737757,BZ
540737758,540737758,BR
540737759,540803071,BZ
@@ -2803,14 +2809,13 @@
621330432,621346815,PL
621346816,621355007,RU
621355008,621357055,UA
-621357056,621359615,RU
-621359616,621360127,UA
-621360128,621381631,RU
+621357056,621381631,RU
621381632,621383679,FR
621383680,621387775,RU
621387776,621389823,NL
621389824,621391871,SK
-621391872,621393919,CY
+621391872,621392127,IT
+621392128,621393919,CY
621393920,621395967,DE
621395968,621398015,CZ
621398016,621400063,TR
@@ -2854,8 +2859,8 @@
621983744,621985791,RS
621985792,621987839,US
621987840,621989887,DK
-621989888,621993471,SE
-621993472,621993983,DK
+621989888,621992959,SE
+621992960,621993983,DK
621993984,621998079,SI
621998080,622000127,ES
622000128,622004223,RU
@@ -2889,7 +2894,7 @@
622483456,622485503,GB
622485504,622487551,MK
622487552,622489599,GB
-622489600,622493695,US
+622489600,622493695,IL
622493696,622497791,MD
622497792,622499839,IL
622499840,622501887,SE
@@ -2962,9 +2967,7 @@
623673344,623689727,NO
623689728,623706111,RU
623706112,623771647,BY
-623771648,623774207,GB
-623774208,623774719,NL
-623774720,623775743,GB
+623771648,623775743,GB
623775744,623777791,IE
623777792,623779839,GB
623779840,623783935,IL
@@ -2975,19 +2978,15 @@
623794176,623796223,ES
623796224,623798271,GB
623798272,623800319,GE
-623800320,623801086,LU
-623801087,623801087,SE
-623801088,623801855,LU
-623801856,623802623,SE
-623802624,623804415,NL
+623800320,623801855,LU
+623801856,623803391,SE
+623803392,623804415,NL
623804416,623806463,RU
623806464,623808511,NL
623808512,623810559,RU
623810560,623812607,ES
623812608,623820799,SE
-623820800,623821823,NL
-623821824,623822335,US
-623822336,623822847,NL
+623820800,623822847,NL
623822848,623824895,GB
623824896,623826943,CZ
623826944,623837183,UA
@@ -3025,22 +3024,12 @@
624579424,624579455,US
624579456,624581599,NL
624581600,624581631,US
-624581632,624583495,NL
-624583496,624583503,US
-624583504,624584023,NL
-624584024,624584031,US
-624584032,624584095,NL
-624584096,624584103,US
-624584104,624584999,NL
-624585000,624585007,US
-624585008,624585583,NL
-624585584,624585599,US
-624585600,624585815,NL
-624585816,624585823,AU
-624585824,624590847,NL
+624581632,624590847,NL
624590848,624640951,FR
624640952,624640959,PT
-624640960,624658323,FR
+624640960,624646351,FR
+624646352,624646367,GB
+624646368,624658323,FR
624658324,624658327,IE
624658328,624658479,FR
624658480,624658483,DE
@@ -3048,7 +3037,9 @@
624661788,624661788,RO
624661789,624661955,FR
624661956,624661959,PL
-624661960,624665587,FR
+624661960,624664676,FR
+624664677,624664677,IE
+624664678,624665587,FR
624665588,624665591,DE
624665592,624673535,FR
624673536,624673791,ES
@@ -3071,8 +3062,8 @@
624684804,624684839,FR
624684840,624684843,ES
624684844,624687343,FR
-624687344,624687345,CZ
-624687346,624689076,FR
+624687344,624687346,CZ
+624687347,624689076,FR
624689077,624689078,BE
624689079,624689151,FR
624689152,624691199,DE
@@ -3141,7 +3132,8 @@
625688576,625704959,MD
625704960,625707007,GE
625707008,625709055,AT
-625709056,625713151,NL
+625709056,625711103,JO
+625711104,625713151,NL
625713152,625721343,DK
625721344,625725439,RU
625725440,625727487,PS
@@ -3171,10 +3163,7 @@
625842176,625844223,PL
625844224,625846271,IT
625846272,625848319,RS
-625848320,625851391,GB
-625851392,625851903,NL
-625851904,625852415,SE
-625852416,625854463,GB
+625848320,625854463,GB
625854464,625856511,DE
625856512,625860607,IT
625860608,625868799,CZ
@@ -3207,9 +3196,7 @@
628015104,628017151,GB
628017152,628019199,CH
628019200,628021247,UZ
-628021248,628021504,GB
-628021505,628022015,IE
-628022016,628023295,GB
+628021248,628023295,GB
628023296,628029439,RU
628029440,628031487,GB
628031488,628097023,HU
@@ -3219,10 +3206,10 @@
628236288,628244479,DE
628244480,628246527,FR
628246528,628248575,MT
-628248576,628249599,NL
-628249600,628250623,FI
+628248576,628250623,FI
628250624,628252671,NL
-628252672,628260863,DE
+628252672,628259071,DE
+628259072,628260863,SC
628260864,628277247,AZ
628277248,628293631,IR
628293632,628359167,UA
@@ -3254,7 +3241,7 @@
628852736,628867071,SE
628867072,628869119,IR
628869120,628871167,PL
-628871168,628873215,NL
+628871168,628873215,US
628873216,628875263,RU
628875264,628877311,SE
628877312,628879359,BE
@@ -3300,15 +3287,18 @@
629669888,629735423,FI
629735424,629800959,IR
629800960,629866495,DE
-629866496,629880831,RU
+629866496,629869149,RU
+629869150,629869405,NL
+629869406,629879807,RU
+629879808,629880063,DE
+629880064,629880831,RU
629880832,629881855,EE
629881856,629882879,LT
629882880,629882880,EU
629882881,629882889,GB
629882890,629882890,GB
629882891,629883135,GB
-629883136,629883391,AU
-629883392,629883903,EU
+629883136,629883903,EU
629883904,629884159,AU
629884160,629884671,EU
629884672,629884927,AU
@@ -3386,9 +3376,7 @@
630806528,630808575,ES
630808576,630810175,NL
630810176,630816767,CH
-630816768,630828543,RO
-630828544,630829055,FR
-630829056,630833151,RO
+630816768,630833151,RO
630833152,630849535,NL
630849536,630980607,TR
630980608,631001087,RO
@@ -3551,7 +3539,9 @@
635200144,635200151,IT
635200152,635200167,GB
635200168,635200175,IT
-635200176,635200231,GB
+635200176,635200199,GB
+635200200,635200207,IT
+635200208,635200231,GB
635200232,635200239,IT
635200240,635200263,GB
635200264,635200271,IT
@@ -3561,15 +3551,11 @@
635200416,635200423,IT
635200424,635200431,GB
635200432,635200439,IT
-635200440,635200487,GB
-635200488,635200495,IT
-635200496,635200631,GB
+635200440,635200631,GB
635200632,635200639,IT
-635200640,635200687,GB
-635200688,635200695,IT
-635200696,635200959,GB
-635200960,635200975,IT
-635200976,635200991,GB
+635200640,635200959,GB
+635200960,635200967,IT
+635200968,635200991,GB
635200992,635200999,IT
635201000,635201087,GB
635201088,635201095,IT
@@ -3579,9 +3565,7 @@
635201256,635201263,IT
635201264,635201383,GB
635201384,635201391,IT
-635201392,635201463,GB
-635201464,635201471,IT
-635201472,635203583,GB
+635201392,635203583,GB
635203584,635207679,JO
635207680,635211775,HU
635211776,635213823,NL
@@ -3590,7 +3574,6 @@
635219968,635224063,RU
635224064,635240447,HU
635240448,635256831,IR
-635256832,635273215,GB
635273216,635281407,UA
635281408,635283455,RO
635283456,635284479,DE
@@ -3617,9 +3600,7 @@
635723776,635725823,ES
635725824,635727871,US
635727872,635729919,RU
-635729920,635732479,DE
-635732480,635732991,US
-635732992,635748351,DE
+635729920,635748351,DE
635748352,635764735,IE
635764736,635830271,UA
635830272,635842559,DE
@@ -3627,8 +3608,7 @@
635846656,635854847,ES
635854848,635856895,NL
635856896,635858943,TR
-635858944,635860479,RU
-635860480,635860991,NL
+635858944,635860991,RU
635860992,635863039,BE
635863040,635895807,RU
635895808,635961343,KW
@@ -3652,9 +3632,8 @@
636170496,636170751,IS
636170752,636171263,CH
636171264,636171519,CL
-636171520,636171824,AT
-636171825,636171825,GB
-636171826,636172031,AT
+636171520,636171775,ES
+636171776,636172031,GB
636172032,636172287,IM
636172288,636174335,AT
636174336,636176383,RU
@@ -3692,8 +3671,7 @@
637186048,637206527,SE
637206528,637239295,NL
637239296,637272063,RO
-637272064,637272575,RU
-637272576,637276159,DE
+637272064,637276159,DE
637276160,637278207,RU
637278208,637288447,GB
637288448,637296639,AM
@@ -3702,9 +3680,7 @@
637300736,637302783,NO
637302784,637304831,NL
637304832,637313023,CH
-637313024,637313535,EU
-637313536,637314047,NL
-637314048,637315071,EU
+637313024,637315071,EU
637315072,637317119,NL
637317120,637319167,ES
637319168,637321215,AT
@@ -3712,7 +3688,27 @@
637323264,637325311,FR
637325312,637327359,NO
637327360,637329407,IR
-637329408,637337599,AT
+637329408,637330175,AT
+637330176,637330431,DE
+637330432,637330943,JP
+637330944,637331199,GB
+637331200,637331455,IE
+637331456,637331711,GB
+637331712,637331967,AT
+637331968,637332223,DE
+637332224,637332991,AT
+637332992,637333503,BR
+637333504,637333759,AU
+637333760,637334271,AT
+637334272,637334527,TW
+637334528,637334783,KR
+637334784,637335039,AE
+637335040,637335295,SK
+637335296,637335551,BG
+637335552,637336831,AT
+637336832,637337087,IT
+637337088,637337343,RU
+637337344,637337599,AT
637337600,637403135,NO
637403136,637534207,IR
637534208,641736703,US
@@ -3971,9 +3967,7 @@
692658176,692666367,ZA
692666368,692674559,TZ
692674560,692682751,ML
-692682752,692690431,NG
-692690432,692690687,GH
-692690688,692690943,NG
+692682752,692690943,NG
692690944,692707327,TZ
692707328,692715519,NG
692715520,692719615,BJ
@@ -4265,8 +4259,7 @@
700260352,700268543,CI
700268544,700276735,ZA
700276736,700284927,CI
-700284928,700293119,GH
-700293120,700301311,EG
+700284928,700301311,GH
700301312,700309503,CD
700309504,700313599,DJ
700313600,700317695,US
@@ -4311,6 +4304,10 @@
700414976,700432383,ZA
700432384,700434431,KE
700434432,700436479,LS
+700436480,700437503,NG
+700437504,700438527,MU
+700438528,700439551,BW
+700439552,700440575,GN
700440576,700442623,KE
700442624,700444671,ZW
700444672,700446719,GH
@@ -4319,24 +4316,13 @@
700448768,700579839,ZA
700579840,700587007,A2
700587008,700587263,ZM
-700587264,700588031,A2
-700588032,700588286,KM
-700588287,700588287,A2
+700587264,700588287,A2
700588288,700588543,KM
-700588544,700588798,IO
-700588799,700590847,A2
-700590848,700591103,CM
-700591104,700592383,A2
-700592384,700592639,KE
-700592640,700593151,A2
+700588544,700593151,A2
700593152,700594175,NG
700594176,700595967,A2
700595968,700596223,CD
-700596224,700604927,A2
-700604928,700605183,NG
-700605184,700632831,A2
-700632832,700633087,SA
-700633088,700645375,A2
+700596224,700645375,A2
700645376,700710911,ZA
700710912,700776447,EG
700776448,700841983,RW
@@ -4399,18 +4385,15 @@
701423616,701431807,NG
701431808,701439999,CI
701440000,701448191,MG
-701448192,701461247,KE
-701461248,701461503,CD
-701461504,701462783,KE
-701462784,701463295,CG
-701463296,701463394,KE
+701448192,701462783,KE
+701462784,701463039,CG
+701463040,701463394,KE
701463395,701463395,NG
701463396,701463528,KE
701463529,701463529,NG
701463530,701463807,KE
701463808,701464063,CG
-701464064,701464319,KE
-701464320,701464575,CG
+701464064,701464575,KE
701464576,701472767,MU
701472768,701480959,TG
701480960,701489151,CI
@@ -4578,6 +4561,7 @@
702488576,702490623,ZA
702490624,702491647,AO
702491648,702492671,NG
+702492672,702493695,GN
702493696,702494719,EG
702494720,702495743,KE
702495744,702496767,ZA
@@ -4588,6 +4572,7 @@
702500864,702501887,NA
702501888,702502911,UG
702502912,702503935,SL
+702503936,702504959,CM
702504960,702505983,MR
702505984,702507007,AO
702507008,702508031,CD
@@ -4707,7 +4692,8 @@
772276224,772284415,NL
772284416,772284927,RU
772284928,772285183,UA
-772285184,772296703,RU
+772285184,772285439,UZ
+772285440,772296703,RU
772296704,772300799,UA
772300800,772341759,RU
772341760,772407295,NO
@@ -4719,9 +4705,7 @@
772734976,772800511,NO
772800512,772802559,GB
772802560,772804607,RU
-772804608,772805119,GL
-772805120,772805631,DK
-772805632,772806655,GL
+772804608,772806655,GL
772806656,772808703,RU
772808704,772810751,GB
772810752,772812799,FR
@@ -4866,9 +4850,7 @@
773120000,773124095,GB
773124096,773128191,CH
773128192,773132287,DE
-773132288,773134335,IT
-773134336,773134847,CH
-773134848,773136383,IT
+773132288,773136383,IT
773136384,773140479,DK
773140480,773144575,CY
773144576,773148671,RU
@@ -4885,10 +4867,10 @@
773167360,773167615,NL
773167616,773168391,US
773168392,773168415,NL
-773168416,773168639,US
-773168640,773168895,NL
-773168896,773169151,US
-773169152,773173247,NL
+773168416,773168511,US
+773168512,773168895,NL
+773168896,773169023,US
+773169024,773173247,NL
773173248,773177343,IT
773177344,773181439,FR
773181440,773185535,PL
@@ -4897,7 +4879,15 @@
773197824,773201919,CH
773201920,773206015,DE
773206016,773210111,RU
-773210112,773214207,US
+773210112,773210623,US
+773210624,773211135,ES
+773211136,773211391,FR
+773211392,773211647,US
+773211648,773211903,NL
+773211904,773212159,US
+773212160,773212671,NL
+773212672,773213183,GB
+773213184,773214207,US
773214208,773218303,FR
773218304,773222399,IS
773222400,773226495,SE
@@ -5073,9 +5063,7 @@
773963776,773971967,ME
773971968,773980159,UA
773980160,773988351,GB
-773988352,773999615,ES
-773999616,774000127,NL
-774000128,774000771,ES
+773988352,774000771,ES
774000772,774000772,NL
774000773,774001663,ES
774001664,774002687,NL
@@ -5105,13 +5093,13 @@
774152192,774160383,BA
774160384,774160415,VA
774160416,774160448,LI
-774160449,774160480,IM
+774160449,774160458,IM
+774160459,774160468,CA
+774160469,774160480,MX
774160481,774160514,IS
-774160515,774160524,MX
-774160525,774160547,VA
+774160515,774160547,MX
774160548,774160580,AE
-774160581,774160590,MX
-774160591,774160612,VA
+774160581,774160612,MX
774160613,774160639,AT
774160640,774160671,GI
774160672,774160702,CY
@@ -5303,7 +5291,8 @@
774162337,774162346,AZ
774162347,774162366,US
774162367,774162375,VA
-774162376,774162386,MX
+774162376,774162376,MX
+774162377,774162386,GB
774162387,774162396,ZW
774162397,774162406,SZ
774162407,774162416,SD
@@ -5313,9 +5302,67 @@
774162443,774162452,BA
774162453,774162462,WS
774162463,774162472,SR
-774162473,774162966,VA
+774162473,774162482,PT
+774162483,774162492,CK
+774162493,774162502,KI
+774162503,774162512,NU
+774162513,774162522,TO
+774162523,774162532,CL
+774162533,774162542,TF
+774162543,774162552,GG
+774162553,774162562,LR
+774162563,774162572,MQ
+774162573,774162582,YT
+774162583,774162592,NC
+774162593,774162602,NG
+774162603,774162622,US
+774162623,774162627,MX
+774162628,774162637,GB
+774162638,774162642,NF
+774162643,774162647,VN
+774162648,774162652,AO
+774162653,774162657,GM
+774162658,774162662,US
+774162663,774162667,BW
+774162668,774162672,US
+774162673,774162677,KG
+774162678,774162682,MG
+774162683,774162687,US
+774162688,774162688,VA
+774162689,774162693,US
+774162694,774162698,MZ
+774162699,774162703,NP
+774162704,774162778,US
+774162779,774162787,CA
+774162788,774162788,VA
+774162789,774162798,CA
+774162799,774162803,BN
+774162804,774162808,TM
+774162809,774162813,US
+774162814,774162818,IT
+774162819,774162823,KZ
+774162824,774162828,MV
+774162829,774162833,PN
+774162834,774162838,SM
+774162839,774162848,GB
+774162849,774162853,AU
+774162854,774162858,NL
+774162859,774162863,IE
+774162864,774162888,US
+774162889,774162893,CA
+774162894,774162903,MX
+774162904,774162908,GB
+774162909,774162913,AX
+774162914,774162917,FO
+774162918,774162923,SJ
+774162924,774162928,CC
+774162929,774162933,NR
+774162934,774162938,GS
+774162939,774162942,UM
+774162943,774162964,VA
+774162965,774162966,MX
774162967,774162967,LI
-774162968,774162969,VA
+774162968,774162969,MX
774162970,774162970,BY
774162971,774162974,VA
774162975,774162975,MY
@@ -5323,11 +5370,10 @@
774162980,774162980,IN
774162981,774162999,VA
774163000,774163000,PK
-774163001,774163004,VA
-774163005,774163005,NZ
-774163006,774163009,VA
+774163001,774163009,BO
774163010,774163010,VE
-774163011,774163074,VA
+774163011,774163014,BO
+774163015,774163074,VA
774163075,774163084,GW
774163085,774163094,LS
774163095,774163104,ML
@@ -5344,38 +5390,24 @@
774163170,774163174,MU
774163175,774163179,CG
774163180,774163205,VA
-774163206,774163209,AU
-774163210,774163210,VA
-774163211,774163214,TD
-774163215,774163215,VA
-774163216,774163219,CD
-774163220,774163220,VA
-774163221,774163224,DJ
-774163225,774163225,VA
-774163226,774163229,CF
-774163230,774163235,VA
-774163236,774163239,MF
-774163240,774163240,VA
-774163241,774163244,VC
-774163245,774163245,VA
-774163246,774163249,PM
-774163250,774163250,VA
-774163251,774163254,BL
-774163255,774163255,VA
-774163256,774163259,DM
-774163260,774163260,VA
-774163261,774163264,KM
-774163265,774163265,VA
-774163266,774163269,TZ
-774163270,774163270,VA
-774163271,774163274,ST
-774163275,774163275,VA
-774163276,774163279,GB
-774163280,774163280,VA
+774163206,774163210,AU
+774163211,774163215,TD
+774163216,774163220,CD
+774163221,774163225,DJ
+774163226,774163230,CF
+774163231,774163235,VA
+774163236,774163240,MF
+774163241,774163245,VC
+774163246,774163250,PM
+774163251,774163255,BL
+774163256,774163260,DM
+774163261,774163265,KM
+774163266,774163270,TZ
+774163271,774163275,ST
+774163276,774163280,GB
774163281,774163284,KP
774163285,774163285,VA
-774163286,774163289,FK
-774163290,774163290,VA
+774163286,774163290,FK
774163291,774163295,BJ
774163296,774163300,BI
774163301,774163305,CI
@@ -5511,14 +5543,20 @@
778304512,778305535,AL
778305536,778371071,IR
778371072,778436607,RU
-778436608,778498047,RO
+778436608,778476031,RO
+778476032,778476287,MD
+778476288,778498047,RO
778498048,778500095,NL
778500096,778502143,RO
778502144,778567679,GR
778567680,778633215,TR
-778633216,778667171,FR
-778667172,778667175,LT
-778667176,778670975,FR
+778633216,778666479,FR
+778666480,778666495,DE
+778666496,778666879,FR
+778666880,778666943,GB
+778666944,778668863,FR
+778668864,778668895,DE
+778668896,778670975,FR
778670976,778670976,DE
778670977,778679212,FR
778679213,778679214,FI
@@ -5530,9 +5568,7 @@
778691712,778691727,GB
778691728,778698751,FR
778698752,778764287,TR
-778764288,778767871,HU
-778767872,778768383,RO
-778768384,778829823,HU
+778764288,778829823,HU
778829824,778895359,RO
778895360,778960895,LV
778960896,779026431,DE
@@ -5641,8 +5677,8 @@
782385152,782401535,SE
782401536,782417919,FR
782417920,782434303,AM
-782434304,782450175,SI
-782450176,782450687,BA
+782434304,782450431,SI
+782450432,782450687,BA
782450688,782467071,DE
782467072,782483455,RU
782483456,782499839,FI
@@ -5661,12 +5697,9 @@
782667520,782667775,LU
782667776,782671103,SC
782671104,782671359,SC
-782671360,782672639,SC
-782672640,782672895,RO
-782672896,782673663,SC
-782673664,782675455,NL
+782671360,782675455,SC
782675456,782676991,DE
-782676992,782678015,US
+782676992,782678015,SC
782678016,782678527,RU
782678528,782680063,SC
782680064,782696447,RU
@@ -5796,7 +5829,6 @@
783785984,783788031,RU
783788032,783790079,NO
783790080,783792127,RU
-783792128,783794175,IR
783794176,783798271,GB
783798272,783800319,PL
783800320,783802367,LV
@@ -5865,9 +5897,7 @@
786595840,786597887,FR
786597888,786599935,EE
786599936,786601983,ES
-786601984,786603007,SE
-786603008,786603519,NL
-786603520,786604031,SE
+786601984,786604031,SE
786604032,786606079,RU
786606080,786608127,GB
786608128,786610175,IT
@@ -5957,9 +5987,9 @@
786915328,786917375,SK
786917376,786919423,RO
786919424,786919431,IT
-786919432,786919535,GB
-786919536,786919543,IT
-786919544,786919879,GB
+786919432,786919759,GB
+786919760,786919767,IT
+786919768,786919879,GB
786919880,786919887,IT
786919888,786920191,GB
786920192,786920199,IT
@@ -5967,7 +5997,11 @@
786920344,786920351,IT
786920352,786920495,GB
786920496,786920503,IT
-786920504,786920703,GB
+786920504,786920559,GB
+786920560,786920567,IT
+786920568,786920639,GB
+786920640,786920647,IT
+786920648,786920703,GB
786920704,786920711,IT
786920712,786920831,GB
786920832,786920847,IT
@@ -5975,9 +6009,9 @@
786920856,786920863,IT
786920864,786921015,GB
786921016,786921023,IT
-786921024,786921391,GB
-786921392,786921399,IT
-786921400,786921471,GB
+786921024,786921319,GB
+786921320,786921327,IT
+786921328,786921471,GB
786921472,786923519,ES
786923520,786925567,FR
786925568,786927615,DE
@@ -5987,9 +6021,7 @@
786933760,786935807,RU
786935808,786937855,DE
786937856,786939903,GB
-786939904,786940415,FI
-786940416,786941439,SE
-786941440,786941951,FI
+786939904,786941951,FI
786941952,786943999,CH
786944000,786946047,RU
786946048,786948095,FR
@@ -6055,7 +6087,9 @@
787192064,787192319,FR
787192320,787192575,DE
787192576,787192831,SE
-787192832,787193855,EU
+787192832,787193087,EU
+787193088,787193343,FI
+787193344,787193855,EU
787193856,787195903,RU
787195904,787197951,GB
787197952,787199999,FR
@@ -6152,27 +6186,11 @@
787863552,787865599,DE
787865600,787869695,FR
787869696,787873791,GB
-787873792,787896575,SE
-787896576,787896703,SE
-787896704,787906559,SE
+787873792,787906559,SE
787906560,787939327,GR
787939328,787972095,GB
787972096,788004863,UA
-788004864,788005375,GB
-788005376,788006399,BE
-788006400,788006911,IT
-788006912,788007423,FR
-788007424,788007935,DE
-788007936,788008447,US
-788008448,788008959,SG
-788008960,788009471,IN
-788009472,788009983,ES
-788009984,788010495,HK
-788010496,788011007,AU
-788011008,788011519,CN
-788011520,788012031,AR
-788012032,788012543,CA
-788012544,788013055,RU
+788004864,788013055,GB
788013056,788021247,IR
788021248,788029439,SI
788029440,788045823,GB
@@ -6201,10 +6219,7 @@
788234240,788242431,SA
788242432,788250623,IR
788250624,788258815,KG
-788258816,788260351,DE
-788260352,788260863,NL
-788260864,788266495,DE
-788266496,788267007,IN
+788258816,788267007,DE
788267008,788271103,SE
788271104,788275199,DE
788275200,788279295,AL
@@ -6215,8 +6230,7 @@
788299776,788303871,DE
788303872,788307967,IT
788307968,788312063,RU
-788312064,788315135,FR
-788315136,788316159,LU
+788312064,788316159,FR
788316160,788320255,NL
788320256,788324351,UA
788324352,788328447,CZ
@@ -6410,7 +6424,7 @@
835715072,835977215,CN
835977216,836042751,JP
836042752,836046847,HK
-836046848,836050943,AU
+836046848,836050943,SG
836050944,836059135,IN
836059136,836075519,VN
836075520,836501503,TW
@@ -6445,20 +6459,21 @@
838467584,838729727,JP
838729728,838795263,KR
838795264,838860799,AU
-838860800,839062271,US
+838860800,839027967,US
+839027968,839030015,IN
+839030016,839062271,US
839062272,839064063,CA
839064064,839069183,US
839069184,839071231,CA
839071232,839072255,US
839072256,839074303,CA
-839074304,839101695,US
-839101696,839102207,CA
-839102208,839352319,US
+839074304,839352319,US
839352320,839353343,NL
839353344,839360511,US
-839360512,839366911,NL
+839360512,839364607,NL
+839364608,839366911,US
839366912,839367167,CZ
-839367168,839368703,NL
+839367168,839368703,US
839368704,839385087,CZ
839385088,840161595,US
840161596,840161596,US
@@ -6508,7 +6523,9 @@
897238056,905969663,DE
905969664,920125439,US
920125440,920256511,IE
-920256512,920911871,US
+920256512,920518655,US
+920518656,920649727,CN
+920649728,920911871,US
920911872,921042943,IE
921042944,921174015,US
921174016,921255935,BR
@@ -6905,9 +6922,7 @@
1024365056,1024365311,AP
1024365312,1024365727,JP
1024365728,1024365759,SG
-1024365760,1024370687,JP
-1024370688,1024371199,PH
-1024371200,1024375551,JP
+1024365760,1024375551,JP
1024375552,1024375807,AU
1024375808,1024376831,JP
1024376832,1024393215,PH
@@ -6950,9 +6965,7 @@
1026408448,1026416639,JP
1026416640,1026420735,CN
1026420736,1026422783,JP
-1026422784,1026423295,AU
-1026423296,1026423551,AP
-1026423552,1026424831,AU
+1026422784,1026424831,AU
1026424832,1026490367,JP
1026490368,1026523135,TH
1026523136,1026539519,CN
@@ -7093,7 +7106,9 @@
1041708288,1041708543,FR
1041708544,1041708799,GB
1041708800,1041709055,FR
-1041709056,1041711871,GB
+1041709056,1041710671,GB
+1041710672,1041710687,FR
+1041710688,1041711871,GB
1041711872,1041712127,FR
1041712128,1041712383,GB
1041712384,1041712639,FR
@@ -7103,7 +7118,9 @@
1041714944,1041715199,FR
1041715200,1041715567,GB
1041715568,1041715583,FR
-1041715584,1041716223,GB
+1041715584,1041716039,GB
+1041716040,1041716047,FR
+1041716048,1041716223,GB
1041716224,1041716479,FR
1041716480,1041718527,GB
1041718528,1041718783,FR
@@ -7115,7 +7132,9 @@
1041720320,1041720487,FR
1041720488,1041720495,GB
1041720496,1041720831,FR
-1041720832,1041722623,GB
+1041720832,1041721759,GB
+1041721760,1041721775,FR
+1041721776,1041722623,GB
1041722624,1041722879,FR
1041722880,1041723775,GB
1041723776,1041723839,FR
@@ -7125,13 +7144,13 @@
1041724928,1041725439,FR
1041725440,1041725695,GB
1041725696,1041725951,FR
-1041725952,1041727487,GB
-1041727488,1041727999,FR
-1041728000,1041728767,GB
+1041725952,1041728767,GB
1041728768,1041729023,FR
1041729024,1041729559,GB
1041729560,1041729560,FR
-1041729561,1041731071,GB
+1041729561,1041729935,GB
+1041729936,1041729951,FR
+1041729952,1041731071,GB
1041731072,1041731327,FR
1041731328,1041731839,GB
1041731840,1041732095,FR
@@ -7153,9 +7172,7 @@
1041745664,1041745919,FR
1041745920,1041748991,GB
1041748992,1041749247,EU
-1041749248,1041749659,GB
-1041749660,1041749663,FR
-1041749664,1041749759,GB
+1041749248,1041749759,GB
1041749760,1041750015,FR
1041750016,1041750527,GB
1041750528,1041751039,FR
@@ -7181,9 +7198,7 @@
1042120704,1042153471,PL
1042153472,1042284543,GB
1042284544,1042292735,CH
-1042292736,1042294783,NL
-1042294784,1042295295,GE
-1042295296,1042295551,NL
+1042292736,1042295551,NL
1042295552,1042296575,GE
1042296576,1042300927,NL
1042300928,1042309119,RU
@@ -7197,11 +7212,15 @@
1042808832,1042817023,DE
1042817024,1042825215,IE
1042825216,1042833407,CZ
-1042833408,1042841599,GB
+1042833408,1042834025,GB
+1042834026,1042834026,PT
+1042834027,1042840673,GB
+1042840674,1042840674,PT
+1042840675,1042841599,GB
1042841600,1042874367,AT
1042874368,1042877183,NL
-1042877184,1042877951,DE
-1042877952,1042879487,NL
+1042877184,1042877439,DE
+1042877440,1042879487,NL
1042879488,1042879743,US
1042879744,1042879999,NL
1042880000,1042880255,GB
@@ -7224,7 +7243,9 @@
1043349504,1043357695,DE
1043357696,1043365887,CH
1043365888,1043398655,PT
-1043398656,1043475455,GB
+1043398656,1043470127,GB
+1043470128,1043470223,NL
+1043470224,1043475455,GB
1043475456,1043475711,DE
1043475712,1043475871,GB
1043475872,1043475887,DE
@@ -7234,9 +7255,7 @@
1043476384,1043476399,DE
1043476400,1043476431,GB
1043476432,1043476447,DE
-1043476448,1043476991,GB
-1043476992,1043477503,DE
-1043477504,1043483406,GB
+1043476448,1043483406,GB
1043483407,1043483407,CH
1043483408,1043488767,GB
1043488768,1043496959,DE
@@ -7254,9 +7273,7 @@
1043892736,1043892991,CD
1043892992,1043897343,A2
1043897344,1043897855,KE
-1043897856,1043912703,A2
-1043912704,1043913215,ZM
-1043913216,1043919359,A2
+1043897856,1043919359,A2
1043919360,1043919871,SD
1043919872,1043921919,A2
1043921920,1043922943,IL
@@ -7267,9 +7284,7 @@
1044046256,1044046263,BE
1044046264,1044118015,NL
1044118016,1044118271,BE
-1044118272,1044118423,NL
-1044118424,1044118431,BE
-1044118432,1044119551,NL
+1044118272,1044119551,NL
1044119552,1044152319,GB
1044152320,1044185087,IR
1044185088,1044193279,RU
@@ -7277,26 +7292,11 @@
1044201472,1044217855,FI
1044217856,1044226047,DK
1044226048,1044234239,OM
-1044250624,1044251135,BE
-1044251136,1044251647,EU
-1044251648,1044252159,BE
-1044252160,1044253695,EU
-1044253696,1044254207,BE
-1044254208,1044256767,EU
-1044256768,1044257279,BE
-1044257280,1044257791,EU
-1044257792,1044258303,BE
-1044258304,1044260351,EU
+1044250624,1044260351,EU
1044260352,1044261119,BE
-1044261120,1044265983,EU
-1044265984,1044266495,BE
-1044266496,1044267519,EU
-1044267520,1044268031,BE
-1044268032,1044269055,EU
-1044269056,1044269567,BE
-1044269568,1044270079,EU
-1044270080,1044271615,BE
-1044271616,1044283391,EU
+1044261120,1044270079,EU
+1044270080,1044271103,BE
+1044271104,1044283391,EU
1044283392,1044316159,FR
1044316160,1044332543,NO
1044332544,1044348927,RU
@@ -7308,33 +7308,22 @@
1044414464,1044447231,GB
1044447232,1044453233,SE
1044453234,1044453234,NO
-1044453235,1044454911,SE
-1044454912,1044455423,NO
+1044453235,1044455167,SE
+1044455168,1044455423,NO
1044455424,1044463615,EE
1044463616,1044479999,SE
1044480000,1044488191,CH
1044488192,1044496383,SK
1044496384,1044512767,EE
1044512768,1044578303,DK
-1044578304,1044586495,GB
-1044586496,1044587007,DE
-1044587008,1044589055,GB
-1044589056,1044589567,DE
-1044589568,1044632575,GB
-1044632576,1044633087,DE
-1044633088,1044635647,GB
-1044635648,1044636159,US
-1044636160,1044636671,GB
+1044578304,1044636671,GB
1044636672,1044637695,DE
1044637696,1044638273,GB
1044638274,1044638274,GB
1044638275,1044638463,GB
1044638464,1044638719,DE
-1044638720,1044639743,GB
-1044639744,1044640255,DE
-1044640256,1044640767,GB
-1044640768,1044641791,DE
-1044641792,1044642815,US
+1044638720,1044640767,GB
+1044640768,1044642815,DE
1044642816,1044643839,GB
1044643840,1044652031,DE
1044652032,1044660223,LY
@@ -7348,7 +7337,9 @@
1044668416,1044676607,BA
1044676608,1044684799,RU
1044684800,1044692991,HU
-1044692992,1044698623,AT
+1044692992,1044698111,AT
+1044698112,1044698367,DE
+1044698368,1044698623,AT
1044698624,1044699135,DE
1044699136,1044701183,AT
1044701184,1044709375,EG
@@ -7367,9 +7358,7 @@
1044905984,1044908031,GB
1044908032,1044909055,US
1044909056,1044916735,GB
-1044916736,1044919295,DE
-1044919296,1044919807,GB
-1044919808,1044920319,DE
+1044916736,1044920319,DE
1044920320,1044921343,GB
1044921344,1044922367,US
1044922368,1044930559,DE
@@ -7391,9 +7380,7 @@
1044936548,1044936548,BE
1044936549,1044936703,GB
1044936704,1044936959,BE
-1044936960,1044937031,GB
-1044937032,1044937039,BE
-1044937040,1044937727,GB
+1044936960,1044937727,GB
1044937728,1044937983,BE
1044937984,1044946943,GB
1044946944,1044955135,UA
@@ -7406,8 +7393,7 @@
1045020672,1045037055,NO
1045037056,1045118975,GR
1045118976,1045119231,US
-1045119232,1045119743,AL
-1045119744,1045135359,GR
+1045119232,1045135359,GR
1045135360,1045168127,DE
1045168128,1045233663,RU
1045233664,1045241855,GB
@@ -7418,8 +7404,8 @@
1045282816,1045299199,HU
1045299200,1045302271,GB
1045302272,1045303295,EU
-1045303296,1045305855,DE
-1045305856,1045307391,EU
+1045303296,1045305343,DE
+1045305344,1045307391,EU
1045307392,1045315583,RU
1045315584,1045319679,DE
1045319680,1045323775,RU
@@ -7429,11 +7415,7 @@
1045446656,1045447423,SK
1045447424,1045447679,HU
1045447680,1045454847,SK
-1045454848,1045460991,DE
-1045460992,1045461503,FR
-1045461504,1045461631,DE
-1045461632,1045461695,FR
-1045461696,1045463039,DE
+1045454848,1045463039,DE
1045463040,1045471231,FI
1045471232,1045479423,UA
1045479424,1045487615,SE
@@ -7472,23 +7454,17 @@
1046150610,1046151167,IL
1046151168,1046216703,DE
1046216704,1046282239,NO
-1046282240,1046288895,DE
-1046288896,1046290431,AG
+1046282240,1046289407,DE
+1046289408,1046290431,AG
1046290432,1046298623,PL
1046298624,1046315007,AT
-1046315008,1046315519,FR
-1046315520,1046316031,IT
-1046316032,1046316543,FR
-1046316544,1046317055,DK
-1046317056,1046317567,ES
-1046317568,1046318591,GB
-1046318592,1046323199,NL
+1046315008,1046316031,FR
+1046316032,1046319103,GB
+1046319104,1046320127,NL
+1046320128,1046321151,GB
+1046321152,1046323199,NL
1046323200,1046331391,ES
-1046331392,1046336511,EU
-1046336512,1046337023,DE
-1046337024,1046337535,EU
-1046337536,1046338047,DE
-1046338048,1046347775,EU
+1046331392,1046347775,EU
1046347776,1046391295,IT
1046391296,1046391807,US
1046391808,1046413311,IT
@@ -7496,42 +7472,50 @@
1046446080,1046478847,DE
1046478848,1046481151,GB
1046481152,1046481407,DE
-1046481408,1046481919,GB
-1046481920,1046481927,DE
-1046481928,1046482943,GB
+1046481408,1046482943,GB
1046482944,1046483199,DE
1046483200,1046485503,GB
-1046485504,1046486271,DE
-1046486272,1046486527,GB
-1046486528,1046487551,DE
+1046485504,1046485759,DE
+1046485760,1046486015,GB
+1046486016,1046486271,DE
+1046486272,1046487039,GB
+1046487040,1046487295,DE
+1046487296,1046487551,GB
1046487552,1046487807,US
-1046487808,1046491135,DE
-1046491136,1046492159,GB
+1046487808,1046488063,GB
+1046488064,1046488575,DE
+1046488576,1046492159,GB
1046492160,1046492415,DE
1046492416,1046492671,GB
1046492672,1046492927,DE
1046492928,1046494719,GB
1046494720,1046495231,DE
-1046495232,1046499327,GB
-1046499328,1046502399,DE
+1046495232,1046495719,GB
+1046495720,1046495727,DE
+1046495728,1046497807,GB
+1046497808,1046497815,DE
+1046497816,1046502143,GB
+1046502144,1046502399,DE
1046502400,1046502911,GB
1046502912,1046503423,DE
1046503424,1046504447,GB
1046504448,1046508543,DE
1046508544,1046511615,GB
1046511616,1046515711,DE
-1046515712,1046517759,GB
-1046517760,1046518271,DE
-1046518272,1046518783,GB
+1046515712,1046518783,GB
1046518784,1046519039,DE
-1046519040,1046524159,GB
+1046519040,1046519247,GB
+1046519248,1046519255,DE
+1046519256,1046524159,GB
1046524160,1046524415,DE
1046524416,1046525351,GB
1046525352,1046525359,DE
-1046525360,1046526719,GB
+1046525360,1046525439,GB
+1046525440,1046525695,DE
+1046525696,1046526719,GB
1046526720,1046526975,DE
-1046526976,1046530047,GB
-1046530048,1046531327,DE
+1046526976,1046530559,GB
+1046530560,1046531327,DE
1046531328,1046538751,GB
1046538752,1046539263,DE
1046539264,1046540031,GB
@@ -7542,9 +7526,7 @@
1046541312,1046541567,DE
1046541568,1046541823,GB
1046541824,1046542079,DE
-1046542080,1046542335,GB
-1046542336,1046542847,DE
-1046542848,1046544383,GB
+1046542080,1046544383,GB
1046544384,1046560767,IT
1046560768,1046585343,ES
1046585344,1046609919,NO
@@ -7563,22 +7545,9 @@
1046839296,1046847487,BA
1046847488,1046855679,ES
1046855680,1046872063,NO
-1046872064,1046872575,BE
-1046872576,1046874111,EU
-1046874112,1046878207,BE
-1046878208,1046881279,EU
-1046881280,1046881791,BE
-1046881792,1046882303,EU
-1046882304,1046884351,BE
-1046884352,1046885375,EU
-1046885376,1046887423,BE
-1046887424,1046888447,EU
-1046888448,1046894591,GB
-1046894592,1046896639,EU
-1046896640,1046897663,GB
-1046897664,1046898175,BE
-1046898176,1046899199,EU
-1046899200,1046904831,BE
+1046872064,1046874111,EU
+1046874112,1046877183,BE
+1046877184,1046904831,EU
1046904832,1046906879,SK
1046906880,1046908927,IR
1046908928,1046910975,SE
@@ -7662,7 +7631,7 @@
1048193024,1048195071,RO
1048195072,1048197119,RU
1048197120,1048201215,UA
-1048201216,1048203263,EU
+1048201216,1048203263,PL
1048203264,1048205311,DE
1048205312,1048209407,RU
1048209408,1048211455,UA
@@ -7685,9 +7654,7 @@
1048576000,1048584191,DE
1048584192,1048592383,IL
1048592384,1048600575,IT
-1048600576,1048601599,UA
-1048601600,1048602111,RU
-1048602112,1048608767,UA
+1048600576,1048608767,UA
1048608768,1048616959,GB
1048616960,1048617215,A2
1048617216,1048618751,KE
@@ -7708,82 +7675,104 @@
1048847872,1048848127,NL
1048848128,1048850687,DE
1048850688,1048850943,NL
-1048850944,1048853503,DE
+1048850944,1048851199,DE
+1048851200,1048851455,NL
+1048851456,1048853503,DE
1048853504,1048853759,NL
-1048853760,1048861503,DE
+1048853760,1048856895,DE
+1048856896,1048856903,NL
+1048856904,1048859767,DE
+1048859768,1048859775,NL
+1048859776,1048859863,DE
+1048859864,1048859871,NL
+1048859872,1048859938,DE
+1048859939,1048859939,NL
+1048859940,1048861503,DE
1048861504,1048861511,NL
1048861512,1048861903,DE
1048861904,1048861911,NL
-1048861912,1048868863,DE
+1048861912,1048861951,DE
+1048861952,1048862207,NL
+1048862208,1048862360,DE
+1048862361,1048862361,NL
+1048862362,1048863712,DE
+1048863713,1048863713,NL
+1048863714,1048868863,DE
1048868864,1048869119,NL
-1048869120,1048874095,DE
-1048874096,1048874103,NL
-1048874104,1048879175,DE
+1048869120,1048870183,DE
+1048870184,1048870191,NL
+1048870192,1048871408,DE
+1048871409,1048871409,NL
+1048871410,1048879175,DE
1048879176,1048879183,NL
-1048879184,1048888319,DE
+1048879184,1048882362,DE
+1048882363,1048882363,NL
+1048882364,1048885464,DE
+1048885465,1048885465,NL
+1048885466,1048886216,DE
+1048886217,1048886217,NL
+1048886218,1048888319,DE
1048888320,1048888575,NL
-1048888576,1048889855,DE
+1048888576,1048889087,DE
+1048889088,1048889343,NL
+1048889344,1048889855,DE
1048889856,1048890111,NL
1048890112,1048890367,DE
1048890368,1048890623,NL
1048890624,1048890879,DE
1048890880,1048891135,NL
-1048891136,1048893183,DE
+1048891136,1048891759,DE
+1048891760,1048891767,NL
+1048891768,1048891895,DE
+1048891896,1048891903,NL
+1048891904,1048893183,DE
1048893184,1048893439,NL
-1048893440,1048894519,DE
-1048894520,1048894527,NL
-1048894528,1048896015,DE
+1048893440,1048896015,DE
1048896016,1048896023,NL
1048896024,1048898303,DE
1048898304,1048898559,NL
1048898560,1048898815,DE
1048898816,1048899071,NL
-1048899072,1048901631,DE
+1048899072,1048900351,DE
+1048900352,1048900607,NL
+1048900608,1048901631,DE
1048901632,1048901887,NL
-1048901888,1048902967,DE
+1048901888,1048902293,DE
+1048902294,1048902294,NL
+1048902295,1048902856,DE
+1048902857,1048902857,NL
+1048902858,1048902967,DE
1048902968,1048902975,NL
-1048902976,1048903167,DE
-1048903168,1048903679,NL
+1048902976,1048903679,DE
1048903680,1048911871,GB
1048911872,1048920063,IT
1048920064,1048936447,NL
1048936448,1048944639,PL
1048944640,1048952831,RU
1048952832,1048969215,NL
-1048969216,1048974335,EU
-1048974336,1048974847,DE
-1048974848,1048979455,EU
-1048979456,1048980479,DE
-1048980480,1048982015,EU
-1048982016,1048982527,DE
-1048982528,1048982783,EU
+1048969216,1048979455,EU
+1048979456,1048979711,DE
+1048979712,1048980223,EU
+1048980224,1048980479,DE
+1048980480,1048982783,EU
1048982784,1048982887,FR
1048982888,1048982943,DE
1048982944,1048983039,FR
1048983040,1048985087,EU
1048985088,1048985343,DE
-1048985344,1049003519,EU
-1049003520,1049004031,DE
-1049004032,1049004543,EU
-1049004544,1049006079,DE
-1049006080,1049007615,EU
-1049007616,1049009151,DE
-1049009152,1049009663,EU
-1049009664,1049011711,DE
-1049011712,1049012991,EU
-1049012992,1049014015,DE
-1049014016,1049014783,EU
-1049014784,1049018367,DE
+1048985344,1049008127,EU
+1049008128,1049009151,DE
+1049009152,1049016319,EU
+1049016320,1049018367,DE
1049018368,1049018623,EU
-1049018624,1049022975,DE
-1049022976,1049023487,EU
-1049023488,1049024511,DE
-1049024512,1049026815,EU
-1049026816,1049029887,DE
-1049029888,1049030143,EU
-1049030144,1049031679,DE
+1049018624,1049022463,DE
+1049022464,1049026815,EU
+1049026816,1049029375,DE
+1049029376,1049030655,EU
+1049030656,1049031679,DE
1049031680,1049032191,EU
-1049032192,1049034751,DE
+1049032192,1049032703,DE
+1049032704,1049034751,EU
1049034752,1049067519,EG
1049067520,1049100287,DK
1049100288,1049231359,GB
@@ -7809,11 +7798,9 @@
1049699072,1049699327,A2
1049699328,1049699583,NL
1049699584,1049699839,BW
-1049699840,1049706495,NL
-1049706496,1049707007,GB
-1049707008,1049708031,NL
-1049708032,1049709055,GB
-1049709056,1049709823,NL
+1049699840,1049708543,NL
+1049708544,1049708799,GB
+1049708800,1049709823,NL
1049709824,1049710079,A2
1049710080,1049710335,NL
1049710336,1049710591,A2
@@ -7878,7 +7865,9 @@
1051033600,1051049983,FI
1051049984,1051066367,HU
1051066368,1051115519,NL
-1051115520,1051123711,BE
+1051115520,1051117055,BE
+1051117056,1051117567,NL
+1051117568,1051123711,BE
1051123712,1051131903,NL
1051131904,1051197439,CH
1051197440,1051213823,CZ
@@ -7919,21 +7908,17 @@
1051803648,1051820031,CZ
1051820032,1051852799,NL
1051852800,1051918335,AT
-1051918336,1051919359,PL
-1051919360,1051920383,AT
-1051920384,1051920895,PL
-1051920896,1051983871,AT
-1051983872,1051990527,EU
-1051990528,1051991039,DE
-1051991040,1052000767,EU
-1052000768,1052002559,DE
+1051918336,1051918591,PL
+1051918592,1051983871,AT
+1051983872,1051990015,EU
+1051990016,1051991039,DE
+1051991040,1052001279,EU
+1052001280,1052002559,DE
1052002560,1052003327,EU
1052003328,1052003583,DE
1052003584,1052011263,EU
1052011264,1052012287,DE
-1052012288,1052012543,EU
-1052012544,1052013055,DE
-1052013056,1052014205,EU
+1052012288,1052014205,EU
1052014206,1052014206,DE
1052014207,1052017535,EU
1052017536,1052017663,DE
@@ -7987,177 +7972,57 @@
1052178432,1052180479,DK
1052180480,1052213247,RU
1052213248,1052246015,FI
-1052246016,1052246527,DE
-1052246528,1052247551,EU
-1052247552,1052248063,DE
-1052248064,1052248575,EU
-1052248576,1052249087,DE
-1052249088,1052251647,EU
-1052251648,1052252159,DE
-1052252160,1052253183,EU
-1052253184,1052253695,DE
-1052253696,1052254207,EU
-1052254208,1052254719,NL
-1052254720,1052256255,EU
-1052256256,1052257279,NL
-1052257280,1052258815,EU
-1052258816,1052260351,FR
-1052260352,1052262911,EU
-1052262912,1052263423,DK
-1052263424,1052263935,DE
-1052263936,1052266495,EU
-1052266496,1052267007,BE
-1052267008,1052267519,EU
-1052267520,1052268031,BE
-1052268032,1052269055,EU
-1052269056,1052269567,ZA
-1052269568,1052270079,EU
-1052270080,1052270591,ZA
-1052270592,1052273151,EU
-1052273152,1052274175,FR
-1052274176,1052274687,ZA
-1052274688,1052275199,EU
-1052275200,1052275711,AT
-1052275712,1052277247,EU
-1052277248,1052277759,IT
-1052277760,1052279295,EU
-1052279296,1052283391,GB
-1052283392,1052284927,EU
+1052246016,1052259327,EU
+1052259328,1052260351,FR
+1052260352,1052279807,EU
+1052279808,1052282879,GB
+1052282880,1052284927,EU
1052284928,1052286975,GB
-1052286976,1052287487,CH
-1052287488,1052287999,SE
-1052288000,1052289535,EU
-1052289536,1052290047,GB
-1052290048,1052292607,EU
-1052292608,1052298751,GB
-1052298752,1052300287,EU
-1052300288,1052300799,GB
-1052300800,1052301823,EU
-1052301824,1052302335,GB
-1052302336,1052303359,EU
+1052286976,1052293119,EU
+1052293120,1052298239,GB
+1052298240,1052303359,EU
1052303360,1052305407,DE
-1052305408,1052305919,EU
-1052305920,1052307455,DE
-1052307456,1052307967,EU
-1052307968,1052308991,CH
-1052308992,1052309503,EU
+1052305408,1052306431,EU
+1052306432,1052307455,DE
+1052307456,1052309503,EU
1052309504,1052310527,CH
-1052310528,1052311039,EU
-1052311040,1052311551,GB
-1052311552,1052313087,EU
-1052313088,1052314623,DE
-1052314624,1052318207,EU
-1052318208,1052318719,DE
-1052318720,1052319231,EU
-1052319232,1052319743,DE
-1052319744,1052320255,EU
-1052320256,1052321791,GB
-1052321792,1052324351,EU
-1052324352,1052324863,GB
-1052324864,1052325887,EU
+1052310528,1052313599,EU
+1052313600,1052314623,DE
+1052314624,1052325887,EU
1052325888,1052327935,GB
1052327936,1052328959,EU
1052328960,1052329983,CH
-1052329984,1052330495,EU
-1052330496,1052331007,CH
-1052331008,1052338175,EU
-1052338176,1052339711,FR
-1052339712,1052342527,EU
-1052342528,1052343039,CH
-1052343040,1052343807,EU
-1052343808,1052344319,CH
-1052344320,1052345855,EU
-1052345856,1052346879,NL
-1052346880,1052347391,EU
+1052329984,1052338175,EU
+1052338176,1052339199,FR
+1052339200,1052347391,EU
1052347392,1052348415,CH
-1052348416,1052349439,EU
-1052349440,1052352511,GB
+1052348416,1052350463,EU
+1052350464,1052352511,GB
1052352512,1052354559,EU
1052354560,1052356607,GB
-1052356608,1052364799,EU
-1052364800,1052365311,BE
-1052365312,1052366847,EU
+1052356608,1052366847,EU
1052366848,1052367871,BE
-1052367872,1052368383,DK
-1052368384,1052370943,EU
-1052370944,1052371455,GB
-1052371456,1052374015,EU
+1052367872,1052374015,EU
1052374016,1052375039,CH
-1052375040,1052378111,EU
-1052378112,1052378623,DE
-1052378624,1052383231,EU
-1052383232,1052383743,GB
-1052383744,1052384767,EU
-1052384768,1052385279,GB
-1052385280,1052385791,EU
-1052385792,1052386303,GB
-1052386304,1052387327,EU
+1052375040,1052387327,EU
1052387328,1052388351,GB
-1052388352,1052390911,EU
-1052390912,1052391423,GB
-1052391424,1052391935,EU
-1052391936,1052392447,GB
-1052392448,1052392959,EU
-1052392960,1052393471,GB
-1052393472,1052394495,EU
-1052394496,1052395007,CH
-1052395008,1052397567,EU
-1052397568,1052398079,IT
-1052398080,1052399359,EU
-1052399360,1052399871,IT
-1052399872,1052405759,EU
-1052405760,1052407295,AT
-1052407296,1052408831,EU
-1052408832,1052409855,GB
-1052409856,1052411391,EU
-1052411392,1052411903,NL
-1052411904,1052412927,EU
-1052412928,1052413439,NL
-1052413440,1052415487,EU
-1052415488,1052415999,BE
-1052416000,1052418047,EU
-1052418048,1052418559,BE
-1052418560,1052419071,EU
-1052419072,1052419583,BE
-1052419584,1052420095,EU
-1052420096,1052420607,GB
-1052420608,1052421119,EU
+1052388352,1052405759,EU
+1052405760,1052406783,AT
+1052406784,1052421119,EU
1052421120,1052422143,GB
1052422144,1052425215,EU
1052425216,1052426239,ZA
-1052426240,1052426751,EU
-1052426752,1052427263,NL
-1052427264,1052427775,CH
-1052427776,1052430591,EU
-1052430592,1052432639,BE
-1052432640,1052441599,EU
-1052441600,1052442111,GB
-1052442112,1052455935,EU
-1052455936,1052456447,NL
-1052456448,1052456959,CH
-1052456960,1052462079,EU
-1052462080,1052462591,FR
-1052462592,1052463615,EU
-1052463616,1052464127,GB
-1052464128,1052477951,EU
-1052477952,1052478463,FR
-1052478464,1052481535,EU
-1052481536,1052483583,NL
-1052483584,1052487679,EU
+1052426240,1052431103,EU
+1052431104,1052432127,BE
+1052432128,1052481535,EU
+1052481536,1052482559,NL
+1052482560,1052487679,EU
1052487680,1052488703,CH
1052488704,1052489727,GB
-1052489728,1052490239,EU
-1052490240,1052490751,SE
-1052490752,1052502015,EU
-1052502016,1052502527,IE
-1052502528,1052505087,EU
-1052505088,1052505599,GB
-1052505600,1052508159,EU
+1052489728,1052508159,EU
1052508160,1052653823,GB
1052653824,1052654079,EU
-1052654080,1052661759,GB
-1052661760,1052662271,SE
-1052662272,1052667903,GB
+1052654080,1052667903,GB
1052667904,1052668063,US
1052668064,1052668079,GB
1052668080,1052668159,US
@@ -8196,45 +8061,29 @@
1053163520,1053294591,DK
1053294592,1053295615,EU
1053295616,1053296639,AT
-1053296640,1053298175,EU
-1053298176,1053298687,CH
-1053298688,1053299711,EU
+1053296640,1053299711,EU
1053299712,1053299967,GB
1053299968,1053300223,EU
1053300224,1053300735,GB
-1053300736,1053305343,EU
-1053305344,1053305855,GR
-1053305856,1053307903,EU
+1053300736,1053307903,EU
1053307904,1053308415,GB
1053308416,1053308671,EU
1053308672,1053308927,GB
-1053308928,1053309439,EU
-1053309440,1053309951,ZA
-1053309952,1053313279,EU
+1053308928,1053313279,EU
1053313280,1053313535,GB
1053313536,1053316607,EU
1053316608,1053316863,GB
-1053316864,1053318143,EU
-1053318144,1053318655,GB
-1053318656,1053319679,EU
-1053319680,1053320191,DE
-1053320192,1053321215,EU
-1053321216,1053321727,DE
-1053321728,1053327615,EU
+1053316864,1053327615,EU
1053327616,1053327871,ZA
1053327872,1053329407,EU
1053329408,1053329663,ES
-1053329664,1053332479,EU
-1053332480,1053334015,BE
+1053329664,1053332991,EU
+1053332992,1053334015,BE
1053334016,1053335551,EU
1053335552,1053336575,ZA
-1053336576,1053338111,EU
-1053338112,1053338623,FI
-1053338624,1053340927,EU
+1053336576,1053340927,EU
1053340928,1053341183,GB
-1053341184,1053347839,EU
-1053347840,1053348351,NL
-1053348352,1053349375,EU
+1053341184,1053349375,EU
1053349376,1053349631,NL
1053349632,1053353983,EU
1053353984,1053354239,IL
@@ -8266,42 +8115,141 @@
1053687808,1053753343,DE
1053753344,1053818879,NL
1053818880,1053819391,DE
-1053819392,1053820415,EU
-1053820416,1053820927,DE
+1053819392,1053819423,EU
+1053819424,1053819439,DE
+1053819440,1053819519,EU
+1053819520,1053819563,DE
+1053819564,1053819583,EU
+1053819584,1053819647,DE
+1053819648,1053820159,EU
+1053820160,1053820927,DE
1053820928,1053821439,EU
1053821440,1053821447,GB
1053821448,1053821567,EU
1053821568,1053821695,GB
-1053821696,1053825023,EU
-1053825024,1053826047,ES
-1053826048,1053829887,EU
+1053821696,1053823999,EU
+1053824000,1053824007,DE
+1053824008,1053824015,EU
+1053824016,1053824023,DE
+1053824024,1053824063,EU
+1053824064,1053824095,DE
+1053824096,1053824127,EU
+1053824128,1053824255,NL
+1053824256,1053825023,EU
+1053825024,1053825791,ES
+1053825792,1053825919,GB
+1053825920,1053826047,ES
+1053826048,1053826815,EU
+1053826816,1053827327,DE
+1053827328,1053827583,BE
+1053827584,1053829887,EU
1053829888,1053830143,DE
-1053830144,1053835263,EU
+1053830144,1053831167,EU
+1053831168,1053831423,DE
+1053831424,1053834943,EU
+1053834944,1053834975,DE
+1053834976,1053835263,EU
1053835264,1053835775,DE
-1053835776,1053837823,EU
+1053835776,1053837311,EU
+1053837312,1053837439,FK
+1053837440,1053837455,GB
+1053837456,1053837567,EU
+1053837568,1053837823,GB
1053837824,1053838335,FK
-1053838336,1053844991,EU
+1053838336,1053838591,DE
+1053838592,1053840399,EU
+1053840400,1053840415,DE
+1053840416,1053840447,EU
+1053840448,1053840511,DE
+1053840512,1053843199,EU
+1053843200,1053843231,DK
+1053843232,1053843455,GB
+1053843456,1053843711,EU
+1053843712,1053843967,DE
+1053843968,1053844223,GB
+1053844224,1053844479,DE
+1053844480,1053844991,EU
1053844992,1053845503,DE
-1053845504,1053846015,EU
+1053845504,1053845727,EU
+1053845728,1053845735,DE
+1053845736,1053846015,EU
1053846016,1053846527,DE
-1053846528,1053847039,EU
-1053847040,1053847551,DE
+1053846528,1053846783,EU
+1053846784,1053847551,DE
1053847552,1053849599,GB
-1053849600,1053855743,EU
+1053849600,1053850367,DE
+1053850368,1053851135,EU
+1053851136,1053851647,DE
+1053851648,1053851903,EU
+1053851904,1053851919,FR
+1053851920,1053852031,EU
+1053852032,1053852047,IT
+1053852048,1053852111,EU
+1053852112,1053852127,GB
+1053852128,1053852159,DE
+1053852160,1053855743,EU
1053855744,1053859839,GB
-1053859840,1053863935,EU
-1053863936,1053864447,DE
-1053864448,1053876223,EU
+1053859840,1053860863,DE
+1053860864,1053862655,EU
+1053862656,1053862783,DE
+1053862784,1053862847,EU
+1053862848,1053862879,DE
+1053862880,1053863423,EU
+1053863424,1053864959,DE
+1053864960,1053865215,EU
+1053865216,1053865727,DE
+1053865728,1053865759,US
+1053865760,1053865983,EU
+1053865984,1053866239,DE
+1053866240,1053866495,ES
+1053866496,1053866823,DE
+1053866824,1053866831,EU
+1053866832,1053866847,DE
+1053866848,1053867519,EU
+1053867520,1053867775,DE
+1053867776,1053867975,EU
+1053867976,1053867983,DE
+1053867984,1053867991,EU
+1053867992,1053867999,DE
+1053868000,1053868007,EU
+1053868008,1053868015,DE
+1053868016,1053868031,EU
+1053868032,1053868447,ES
+1053868448,1053868455,GB
+1053868456,1053868479,EU
+1053868480,1053868543,FR
+1053868544,1053868799,EU
+1053868800,1053869567,DE
+1053869568,1053870079,EU
+1053870080,1053870335,DE
+1053870336,1053870591,GB
+1053870592,1053870847,EU
+1053870848,1053871359,DE
+1053871360,1053871615,EU
+1053871616,1053871871,DE
+1053871872,1053872383,EU
+1053872384,1053872447,DE
+1053872448,1053872511,EU
+1053872512,1053872639,FR
+1053872640,1053872895,EU
+1053872896,1053873663,DE
+1053873664,1053876223,EU
1053876224,1053876479,DE
1053876480,1053876735,GB
-1053876736,1053877759,EU
-1053877760,1053878271,DE
+1053876736,1053876991,DE
+1053876992,1053877247,EU
+1053877248,1053878271,DE
1053878272,1053878783,GB
-1053878784,1053879295,EU
-1053879296,1053881855,DE
-1053881856,1053882367,EU
+1053878784,1053879047,DE
+1053879048,1053879055,EU
+1053879056,1053879071,DE
+1053879072,1053879167,GB
+1053879168,1053879295,EU
+1053879296,1053882111,DE
+1053882112,1053882367,EU
1053882368,1053882879,DE
-1053882880,1053884415,EU
+1053882880,1053883391,GB
+1053883392,1053884415,DE
1053884416,1053892607,BH
1053892608,1053900799,DE
1053900800,1053917183,NO
@@ -8329,9 +8277,7 @@
1054186241,1054186495,GB
1054186496,1054187264,DE
1054187265,1054187519,GB
-1054187520,1054195199,BG
-1054195200,1054195455,RO
-1054195456,1054195711,BG
+1054187520,1054195711,BG
1054195712,1054212095,BE
1054212096,1054277631,DE
1054277632,1054343167,KW
@@ -8362,9 +8308,49 @@
1054646272,1054654463,SE
1054654464,1054662655,MK
1054662656,1054670847,FI
-1054670848,1054672127,EU
+1054670848,1054671103,GB
+1054671104,1054671167,EU
+1054671168,1054671231,IE
+1054671232,1054671371,EU
+1054671372,1054671375,IE
+1054671376,1054671415,EU
+1054671416,1054671423,IE
+1054671424,1054671431,EU
+1054671432,1054671439,IE
+1054671440,1054672127,EU
1054672128,1054672383,DE
-1054672384,1054679039,EU
+1054672384,1054672447,IE
+1054672448,1054672719,EU
+1054672720,1054672727,IE
+1054672728,1054672743,EU
+1054672744,1054672767,IE
+1054672768,1054672775,EU
+1054672776,1054672783,IE
+1054672784,1054672791,EU
+1054672792,1054672807,IE
+1054672808,1054673663,EU
+1054673664,1054673727,IE
+1054673728,1054673855,EU
+1054673856,1054673919,IE
+1054673920,1054673951,EU
+1054673952,1054674047,IE
+1054674048,1054674079,EU
+1054674080,1054674111,IE
+1054674112,1054674455,EU
+1054674456,1054674471,IE
+1054674472,1054674479,EU
+1054674480,1054674495,IE
+1054674496,1054674503,EU
+1054674504,1054674511,IE
+1054674512,1054674519,EU
+1054674520,1054674527,GB
+1054674528,1054674687,EU
+1054674688,1054675199,IE
+1054675200,1054675455,EU
+1054675456,1054675711,IE
+1054675712,1054675967,EU
+1054675968,1054676223,US
+1054676224,1054679039,EU
1054679040,1054687231,UA
1054687232,1054703615,MD
1054703616,1054711807,BG
@@ -8377,9 +8363,7 @@
1054974208,1055129599,DE
1055129600,1055186943,CY
1055186944,1055195135,GR
-1055195136,1055232511,EU
-1055232512,1055233023,NL
-1055233024,1055326207,EU
+1055195136,1055326207,EU
1055326208,1055334399,RU
1055334400,1055342591,IE
1055342592,1055358975,RO
@@ -8436,23 +8420,13 @@
1056875008,1056964607,GB
1056964608,1061558271,US
1061558272,1061559295,PK
-1061559296,1061853695,US
-1061853696,1061854207,GB
-1061854208,1061939711,US
-1061939712,1061940223,JM
-1061940224,1062069247,US
+1061559296,1062069247,US
1062069248,1062070271,PR
-1062070272,1062429695,US
-1062429696,1062430207,PR
-1062430208,1062473727,US
+1062070272,1062473727,US
1062473728,1062473759,IN
1062473760,1062530047,US
1062530048,1062531071,EC
-1062531072,1062545919,US
-1062545920,1062546431,BM
-1062546432,1062871551,US
-1062871552,1062872063,PR
-1062872064,1063390207,US
+1062531072,1063390207,US
1063390208,1063390463,PR
1063390464,1063567359,US
1063567360,1063575551,A2
@@ -8464,11 +8438,7 @@
1063749376,1063751679,A2
1063751680,1063895039,US
1063895040,1063899135,KR
-1063899136,1064124927,US
-1064124928,1064125439,EC
-1064125440,1064127487,US
-1064127488,1064127999,EC
-1064128000,1064170751,US
+1063899136,1064170751,US
1064170752,1064172031,A2
1064172032,1065530879,US
1065530880,1065533439,TC
@@ -8495,39 +8465,25 @@
1066352640,1066354943,JM
1066354944,1066355199,BB
1066355200,1066369023,JM
-1066369024,1067238143,US
-1067238144,1067238399,JP
-1067238400,1067532287,US
-1067532288,1067532799,HN
+1066369024,1067532543,US
+1067532544,1067532799,HN
1067532800,1067575295,US
1067575296,1067577343,HN
-1067577344,1067693055,US
-1067693056,1067693567,CO
-1067693568,1067700735,US
-1067700736,1067701247,CW
-1067701248,1067726847,US
-1067726848,1067727359,EC
-1067727360,1067740159,US
+1067577344,1067740159,US
1067740160,1067741183,HN
-1067741184,1068017663,US
-1068017664,1068018175,YE
-1068018176,1068123135,US
-1068123136,1068123647,BB
-1068123648,1068175871,US
-1068175872,1068176383,YE
-1068176384,1068199935,US
+1067741184,1068123391,US
+1068123392,1068123647,BB
+1068123648,1068199935,US
1068199936,1068204031,CA
1068204032,1068346367,US
-1068346368,1068346879,YE
-1068346880,1068419071,US
+1068346368,1068346623,YE
+1068346624,1068419071,US
1068419072,1068421119,CO
1068421120,1068422143,US
1068422144,1068422399,CA
1068422400,1068473343,US
1068473344,1068474367,BB
-1068474368,1068481023,US
-1068481024,1068481535,PR
-1068481536,1069622866,US
+1068474368,1069622866,US
1069622867,1069622867,MX
1069622868,1070652215,US
1070652216,1070652216,US
@@ -8571,9 +8527,7 @@
1071251712,1071252479,HK
1071252480,1071254783,US
1071254784,1071255039,GB
-1071255040,1071255295,US
-1071255296,1071255551,DE
-1071255552,1071256319,US
+1071255040,1071256319,US
1071256320,1071256575,HK
1071256576,1071258879,US
1071258880,1071259135,HK
@@ -8693,9 +8647,7 @@
1071579648,1072922623,US
1072922624,1072923391,CA
1072923392,1072923647,US
-1072923648,1072924159,CA
-1072924160,1072924671,HT
-1072924672,1072926719,CA
+1072923648,1072926719,CA
1072926720,1072926975,PH
1072926976,1072932863,CA
1072932864,1072933119,US
@@ -8707,29 +8659,24 @@
1072936448,1072936703,PH
1072936704,1072939263,CA
1072939264,1072939311,US
-1072939312,1072939519,CA
-1072939520,1072940031,US
-1072940032,1072942079,CA
+1072939312,1072942079,CA
1072942080,1072942111,US
1072942112,1072942591,CA
1072942592,1072943103,US
1072943104,1072955391,CA
1072955392,1073022975,US
-1073022976,1073025535,HN
-1073025536,1073027071,US
+1073022976,1073025023,HN
+1073025024,1073027071,US
1073027072,1073028095,NI
-1073028096,1073028607,US
-1073028608,1073029119,GD
+1073028096,1073029119,US
1073029120,1073031167,PR
1073031168,1073033215,US
1073033216,1073035263,CW
1073035264,1073036032,GD
-1073036033,1073037823,US
-1073037824,1073038335,GD
-1073038336,1073039359,US
+1073036033,1073039359,US
1073039360,1073041407,GT
-1073041408,1073043455,CO
-1073043456,1073045503,US
+1073041408,1073042431,CO
+1073042432,1073045503,US
1073045504,1073047551,CO
1073047552,1073049599,US
1073049600,1073053695,BS
@@ -8742,9 +8689,7 @@
1073381888,1074020351,US
1074020352,1074028543,CA
1074028544,1074118655,US
-1074118656,1074126847,CA
-1074126848,1074127359,US
-1074127360,1074135039,CA
+1074118656,1074135039,CA
1074135040,1074184191,US
1074184192,1074188287,CA
1074188288,1074229247,US
@@ -8810,9 +8755,7 @@
1075970048,1075972095,CA
1075972096,1075976959,US
1075976960,1075977215,CA
-1075977216,1075985919,US
-1075985920,1075986431,CA
-1075986432,1075987711,US
+1075977216,1075987711,US
1075987712,1075988223,CA
1075988224,1075988319,US
1075988320,1075988351,CA
@@ -8823,8 +8766,8 @@
1075995008,1075995103,US
1075995104,1075995135,CA
1075995136,1075998207,US
-1075998208,1075999231,CA
-1075999232,1076000767,US
+1075998208,1075998719,CA
+1075998720,1076000767,US
1076000768,1076002047,CA
1076002048,1076007423,US
1076007424,1076007935,CA
@@ -8836,18 +8779,14 @@
1076035520,1076035583,IN
1076035584,1076174847,US
1076174848,1076178943,BM
-1076178944,1076184255,US
-1076184256,1076184287,BE
-1076184288,1076196641,US
+1076178944,1076196641,US
1076196642,1076196671,BE
1076196672,1076233177,US
1076233178,1076233178,TC
1076233179,1076338687,US
1076338688,1076346879,CA
1076346880,1076387839,US
-1076387840,1076393727,CA
-1076393728,1076394239,US
-1076394240,1076396031,CA
+1076387840,1076396031,CA
1076396032,1076404223,US
1076404224,1076408319,A2
1076408320,1076412415,CA
@@ -8866,7 +8805,9 @@
1077002240,1077055487,US
1077055488,1077059583,CA
1077059584,1077383167,US
-1077383168,1077384191,US
+1077383168,1077383368,US
+1077383369,1077383880,US
+1077383881,1077384191,US
1077384192,1077444607,US
1077444608,1077452799,CA
1077452800,1077460991,JP
@@ -8880,7 +8821,9 @@
1077641216,1077657599,CA
1077657600,1077840383,US
1077840384,1077840639,US
-1077840640,1077977087,US
+1077840640,1077968383,US
+1077968384,1077968639,US
+1077968640,1077977087,US
1077977088,1077985279,CA
1077985280,1077993471,US
1077993472,1078001663,CA
@@ -8895,7 +8838,9 @@
1078280192,1078280447,CA
1078280448,1078280575,US
1078280576,1078280583,CA
-1078280584,1078281511,US
+1078280584,1078281300,US
+1078281301,1078281301,CA
+1078281302,1078281511,US
1078281512,1078281519,CA
1078281520,1078281599,US
1078281600,1078281663,CA
@@ -8919,28 +8864,25 @@
1078306560,1078306815,GB
1078306816,1078312260,US
1078312261,1078312261,GB
-1078312262,1078349311,US
-1078349312,1078349823,PH
-1078349824,1078433316,US
+1078312262,1078433316,US
1078433317,1078433317,US
1078433318,1078455551,US
1078455552,1078455807,NL
1078455808,1078456319,US
1078456320,1078460415,CA
-1078460416,1078504959,US
-1078504960,1078505471,CA
-1078505472,1078517759,US
+1078460416,1078517759,US
1078517760,1078525951,CA
1078525952,1078722559,US
1078722560,1078734847,AR
1078734848,1078736895,CO
-1078736896,1078737407,US
-1078737408,1078737919,CO
+1078736896,1078737919,US
1078737920,1078738943,EC
-1078738944,1078739455,VE
+1078738944,1078739199,US
+1078739200,1078739455,VE
1078739456,1078739967,US
1078739968,1078743039,PE
-1078743040,1078746111,CO
+1078743040,1078744063,US
+1078744064,1078746111,CO
1078746112,1078747135,PE
1078747136,1078749183,CL
1078749184,1078751231,PE
@@ -8964,13 +8906,11 @@
1079328768,1079377919,US
1079377920,1079380927,CA
1079380928,1079380991,US
-1079380992,1079384575,CA
-1079384576,1079385087,ZW
+1079380992,1079384831,CA
+1079384832,1079385087,ZW
1079385088,1079391231,CA
1079391232,1079391487,US
-1079391488,1079391743,CA
-1079391744,1079392255,HT
-1079392256,1079394175,CA
+1079391488,1079394175,CA
1079394176,1079394191,US
1079394192,1079394303,CA
1079394304,1079395327,EC
@@ -8990,20 +8930,13 @@
1079405440,1079405567,US
1079405568,1079407103,CA
1079407104,1079407359,US
-1079407360,1079407615,CA
-1079407616,1079408127,US
-1079408128,1079413311,CA
+1079407360,1079413311,CA
1079413312,1079413343,US
1079413344,1079415295,CA
1079415296,1079415807,US
-1079415808,1079427583,CA
-1079427584,1079428095,PW
-1079428096,1079431679,CA
-1079431680,1079432191,ZM
-1079432192,1079433215,CA
+1079415808,1079433215,CA
1079433216,1079435263,CR
-1079435264,1079435775,CO
-1079435776,1079437311,CA
+1079435264,1079437311,CA
1079437312,1079439359,US
1079439360,1079443455,CA
1079443456,1079459839,US
@@ -9061,29 +8994,19 @@
1081047581,1081047581,US
1081047582,1081212927,US
1081212928,1081278463,CA
-1081278464,1081369599,US
-1081369600,1081370111,CO
-1081370112,1081378495,US
+1081278464,1081378495,US
1081378496,1081378559,VE
1081378560,1081391103,US
1081391104,1081393151,PA
-1081393152,1081394175,US
-1081394176,1081394687,CL
-1081394688,1081395199,US
+1081393152,1081395199,US
1081395200,1081397247,CL
-1081397248,1081397759,US
-1081397760,1081398783,CL
-1081398784,1081399295,US
+1081397248,1081399295,US
1081399296,1081401343,CL
-1081401344,1081401855,US
-1081401856,1081402367,AR
-1081402368,1081410559,US
+1081401344,1081410559,US
1081410560,1081411583,PR
1081411584,1081413629,US
1081413630,1081413630,PR
-1081413631,1081419775,US
-1081419776,1081420287,PR
-1081420288,1081421311,US
+1081413631,1081421311,US
1081421312,1081421567,MF
1081421568,1081443327,US
1081443328,1081444351,CL
@@ -9158,9 +9081,7 @@
1085997056,1086013439,CA
1086013440,1086042111,US
1086042112,1086046207,CA
-1086046208,1086421503,US
-1086421504,1086422015,MP
-1086422016,1086922751,US
+1086046208,1086922751,US
1086922752,1086930943,CA
1086930944,1086955519,US
1086955520,1086971903,CA
@@ -9223,7 +9144,9 @@
1087717376,1087717858,GB
1087717859,1087717859,US
1087717860,1087719423,GB
-1087719424,1087726096,US
+1087719424,1087726015,US
+1087726016,1087726047,FR
+1087726048,1087726096,US
1087726097,1087726097,GB
1087726098,1087729663,US
1087729664,1087733759,PR
@@ -9312,13 +9235,7 @@
1089306624,1089339391,PR
1089339392,1089469807,US
1089469808,1089469823,CA
-1089469824,1089881599,US
-1089881600,1089882111,GB
-1089882112,1089882623,US
-1089882624,1089883135,GB
-1089883136,1089887231,US
-1089887232,1089887743,GB
-1089887744,1089961983,US
+1089469824,1089961983,US
1089961984,1089970175,CA
1089970176,1089974271,PR
1089974272,1090146303,US
@@ -9348,9 +9265,7 @@
1093021696,1093025791,US
1093025792,1093033983,CA
1093033984,1093058559,US
-1093058560,1093063167,PR
-1093063168,1093063679,DO
-1093063680,1093066751,PR
+1093058560,1093066751,PR
1093066752,1093074943,US
1093074944,1093091327,CA
1093091328,1093108223,US
@@ -9369,13 +9284,11 @@
1093115904,1093116159,CA
1093116160,1093120511,US
1093120512,1093120767,CA
-1093120768,1093121023,US
-1093121024,1093121791,CA
+1093120768,1093121535,US
+1093121536,1093121791,CA
1093121792,1093122175,US
1093122176,1093122303,CA
-1093122304,1093125119,US
-1093125120,1093125631,CA
-1093125632,1093126655,US
+1093122304,1093126655,US
1093126656,1093126911,CA
1093126912,1093128703,US
1093128704,1093128959,CA
@@ -9395,23 +9308,21 @@
1093320192,1093320447,PR
1093320448,1093697535,US
1093697536,1093699071,BB
-1093699072,1093699583,GD
-1093699584,1093699839,BB
-1093699840,1093700095,GD
-1093700096,1093700351,BB
-1093700352,1093700607,GD
+1093699072,1093700607,GD
1093700608,1093701631,VC
1093701632,1093708287,BB
1093708288,1093709311,LC
1093709312,1093716479,BB
-1093716480,1093716735,GD
-1093716736,1093719807,BB
+1093716480,1093717504,GD
+1093717505,1093719807,BB
1093719808,1093720319,LC
1093720320,1093721343,VG
1093721344,1093724415,BB
1093724416,1093725183,VC
1093725184,1093730303,BB
-1093730304,1093747839,US
+1093730304,1093733887,US
+1093733888,1093734143,US
+1093734144,1093747839,US
1093747840,1093747903,US
1093747904,1093966216,US
1093966217,1093966217,NL
@@ -9429,13 +9340,9 @@
1095314944,1095314944,US
1095314945,1095450623,US
1095450624,1095467007,BS
-1095467008,1095627775,US
-1095627776,1095628287,CA
-1095628288,1096278015,US
+1095467008,1096278015,US
1096278016,1096286207,CA
-1096286208,1096351231,US
-1096351232,1096351743,A2
-1096351744,1096518655,US
+1096286208,1096518655,US
1096518656,1096518911,A2
1096518912,1096519167,US
1096519168,1096519423,CD
@@ -9448,9 +9355,7 @@
1096884224,1096888319,CA
1096888320,1096925183,US
1096925184,1096941567,CA
-1096941568,1097067519,US
-1097067520,1097068031,GB
-1097068032,1097727999,US
+1096941568,1097727999,US
1097728000,1097736191,CA
1097736192,1097768959,US
1097768960,1097785343,CA
@@ -9464,11 +9369,7 @@
1097947136,1097949183,VI
1097949184,1097951231,US
1097951232,1097953279,VI
-1097953280,1101182975,US
-1101182976,1101183487,YE
-1101183488,1101190655,US
-1101190656,1101191167,EC
-1101191168,1101304831,US
+1097953280,1101304831,US
1101304832,1101305855,HN
1101305856,1101352959,US
1101352960,1101355007,HN
@@ -9482,25 +9383,13 @@
1101484032,1101488127,CO
1101488128,1101521407,US
1101521408,1101521919,AS
-1101521920,1101542399,US
-1101542400,1101542911,CO
-1101542912,1101574655,US
-1101574656,1101575167,EC
-1101575168,1101650431,US
-1101650432,1101650943,HN
-1101650944,1101676543,US
+1101521920,1101676543,US
1101676544,1101678591,EC
-1101678592,1101750783,US
-1101750784,1101751295,BM
-1101751296,1101792255,US
-1101792256,1101792767,A2
-1101792768,1101797375,US
+1101678592,1101797375,US
1101797376,1101798399,BB
1101798400,1101803519,US
1101803520,1101804543,HN
-1101804544,1101869055,US
-1101869056,1101869567,GH
-1101869568,1101871103,US
+1101804544,1101871103,US
1101871104,1101873151,BO
1101873152,1101983231,US
1101983232,1101983743,CW
@@ -9520,15 +9409,9 @@
1103548416,1103550463,BS
1103550464,1103603711,US
1103603712,1103605759,EC
-1103605760,1103623167,US
-1103623168,1103623679,CO
-1103623680,1103996927,US
-1103996928,1103997439,EC
-1103997440,1104166911,US
+1103605760,1104166911,US
1104166912,1104168959,CO
-1104168960,1104265215,US
-1104265216,1104265727,PH
-1104265728,1104629247,US
+1104168960,1104629247,US
1104629248,1104629759,GH
1104629760,1104753151,US
1104753152,1104753407,SX
@@ -9538,12 +9421,7 @@
1104916992,1104917247,AS
1104917248,1106469887,US
1106469888,1106470911,BS
-1106470912,1106475007,US
-1106475008,1106475519,CO
-1106475520,1106758655,US
-1106758656,1106759167,EC
-1106759168,1106759679,CO
-1106759680,1106767871,US
+1106470912,1106767871,US
1106767872,1106769919,CO
1106769920,1107239935,US
1107239936,1107240191,CN
@@ -9561,21 +9439,17 @@
1107820544,1107853311,ZA
1107853312,1107895039,US
1107895040,1107895807,GB
-1107895808,1107898367,US
-1107898368,1107899903,GB
-1107899904,1107906559,US
-1107906560,1107907071,GB
-1107907072,1107907839,US
+1107895808,1107899391,US
+1107899392,1107899903,GB
+1107899904,1107907839,US
1107907840,1107908095,GB
1107908096,1107909375,US
1107909376,1107909631,GB
1107909632,1107927039,US
1107927040,1107927551,GB
-1107927552,1107935743,US
-1107935744,1107936767,GB
-1107936768,1107946495,US
-1107946496,1107947007,GB
-1107947008,1107948543,US
+1107927552,1107935999,US
+1107936000,1107936255,GB
+1107936256,1107948543,US
1107948544,1107948799,GB
1107948800,1108025343,US
1108025344,1108029439,CA
@@ -9668,13 +9542,8 @@
1113591808,1113595903,CA
1113595904,1113596159,US
1113596160,1113596415,CL
-1113596416,1113596927,GT
-1113596928,1113597951,US
-1113597952,1113598463,PA
-1113598464,1113599487,US
-1113599488,1113599999,VE
-1113600000,1113600511,US
-1113600512,1113603071,VE
+1113596416,1113601023,US
+1113601024,1113603071,VE
1113603072,1113603327,CL
1113603328,1113657343,US
1113657344,1113661439,CA
@@ -9694,9 +9563,7 @@
1113764498,1113764498,US
1113764499,1113769531,US
1113769532,1113769787,US
-1113769788,1113854975,US
-1113854976,1113855487,CA
-1113855488,1113983999,US
+1113769788,1113983999,US
1113984000,1113984255,NL
1113984256,1113997311,US
1113997312,1114005503,CA
@@ -9708,10 +9575,7 @@
1114505216,1114513407,CA
1114513408,1114515455,SA
1114515456,1114517503,US
-1114517504,1114524159,CA
-1114524160,1114524671,ZA
-1114524672,1114533375,CA
-1114533376,1114533887,ZA
+1114517504,1114533887,CA
1114533888,1114537983,AO
1114537984,1114550271,CA
1114550272,1114579831,US
@@ -9793,28 +9657,21 @@
1118572304,1118572319,US
1118572320,1118572351,US
1118572352,1118572543,US
-1118572544,1118790655,US
-1118790656,1118790911,IL
-1118790912,1118961663,US
+1118572544,1118961663,US
1118961664,1118962943,A2
1118962944,1118963199,AS
-1118963200,1118964991,A2
-1118964992,1118965247,CW
+1118963200,1118965247,A2
1118965248,1118965503,AS
1118965504,1118966015,A2
1118966016,1118966271,BR
-1118966272,1118970879,A2
-1118970880,1118971391,SR
-1118971392,1118989311,A2
-1118989312,1118989823,KE
-1118989824,1118993151,A2
+1118966272,1118993151,A2
1118993152,1118993407,GY
1118993408,1118994431,A2
1118994432,1119109119,US
1119109120,1119111167,CA
-1119113216,1119174063,US
-1119174064,1119174071,MX
-1119174072,1119211519,US
+1119113216,1119174407,US
+1119174408,1119174415,MX
+1119174416,1119211519,US
1119211520,1119215615,CA
1119215616,1119289343,US
1119289344,1119354879,CA
@@ -9827,9 +9684,7 @@
1119469568,1119477759,CA
1119477760,1119502335,US
1119502336,1119510527,CA
-1119510528,1119558143,US
-1119558144,1119558655,PR
-1119558656,1119571967,US
+1119510528,1119571967,US
1119571968,1119576063,CA
1119576064,1119580159,US
1119580160,1119584255,CA
@@ -9840,17 +9695,13 @@
1120153600,1120272383,US
1120272384,1120277247,CA
1120277248,1120277503,US
-1120277504,1120281599,CA
-1120281600,1120282111,US
-1120282112,1120283647,CA
+1120277504,1120283647,CA
1120283648,1120284671,EC
1120284672,1120286719,CA
1120286720,1120288767,US
1120288768,1120307199,CA
1120307200,1120307967,EC
-1120307968,1120310271,CA
-1120310272,1120310783,PH
-1120310784,1120321535,CA
+1120307968,1120321535,CA
1120321536,1120346111,US
1120346112,1120350207,CA
1120350208,1120372991,US
@@ -9912,9 +9763,7 @@
1121042432,1121230847,US
1121230848,1121239039,CA
1121239040,1121247231,US
-1121247232,1121250303,CA
-1121250304,1121250815,BZ
-1121250816,1121255423,CA
+1121247232,1121255423,CA
1121255424,1121714998,US
1121714999,1121714999,KW
1121715000,1121878015,US
@@ -9960,9 +9809,9 @@
1123653632,1123654655,KY
1123654656,1123655679,JM
1123655680,1123663871,US
-1123663872,1123665407,SV
-1123665408,1123665919,US
-1123665920,1123667967,SV
+1123663872,1123664895,SV
+1123664896,1123666943,US
+1123666944,1123667967,SV
1123667968,1123670015,PR
1123670016,1123671039,US
1123671040,1123672063,PY
@@ -9972,9 +9821,7 @@
1123848192,1123852287,CA
1123852288,1123950591,US
1123950592,1123958783,CA
-1123958784,1125064703,US
-1125064704,1125065215,GB
-1125065216,1125076115,US
+1123958784,1125076115,US
1125076116,1125076116,US
1125076117,1125076167,US
1125076168,1125076168,US
@@ -9982,7 +9829,9 @@
1125076340,1125076340,US
1125076341,1125076348,US
1125076349,1125076349,US
-1125076350,1125238553,US
+1125076350,1125087999,US
+1125088000,1125088255,CA
+1125088256,1125238553,US
1125238554,1125238554,ES
1125238555,1125290241,US
1125290242,1125290242,AE
@@ -10022,7 +9871,9 @@
1127931904,1128529919,US
1128529920,1128633999,CA
1128634000,1128634015,US
-1128634016,1128792063,CA
+1128634016,1128641023,CA
+1128641024,1128641535,US
+1128641536,1128792063,CA
1128792064,1130536959,US
1130536960,1130539007,GU
1130539008,1133461247,US
@@ -10139,9 +9990,7 @@
1138509824,1138510847,IN
1138510848,1138593791,US
1138593792,1138597887,CA
-1138597888,1138622207,US
-1138622208,1138622463,US
-1138622464,1138712575,US
+1138597888,1138712575,US
1138712576,1138716671,CA
1138716672,1138720767,US
1138720768,1138728959,CA
@@ -10159,8 +10008,8 @@
1138950144,1139146751,US
1139146752,1139154943,GT
1139154944,1139167231,JM
-1139167232,1139168255,US
-1139168256,1139168767,PR
+1139167232,1139168511,US
+1139168512,1139168767,PR
1139168768,1139169279,US
1139169280,1139170303,PR
1139170304,1139171071,US
@@ -10189,7 +10038,13 @@
1145249792,1145257983,CA
1145257984,1145259247,US
1145259248,1145259251,AE
-1145259252,1145307135,US
+1145259252,1145286655,US
+1145286656,1145287167,SG
+1145287168,1145287679,US
+1145287680,1145287935,SG
+1145287936,1145288191,US
+1145288192,1145288447,SG
+1145288448,1145307135,US
1145307136,1145311231,CA
1145311232,1145333879,US
1145333880,1145333887,CN
@@ -10245,9 +10100,7 @@
1152581632,1152614399,CA
1152614400,1152778239,US
1152778240,1152843775,CA
-1152843776,1154488319,US
-1154488320,1154488831,A2
-1154488832,1156071423,US
+1152843776,1156071423,US
1156071424,1156079615,CA
1156079616,1156263935,US
1156263936,1156265983,CA
@@ -10273,70 +10126,7 @@
1158340608,1158344703,CA
1158344704,1158348799,US
1158348800,1158381567,CA
-1158381568,1158481417,US
-1158481418,1158481426,CA
-1158481427,1158481427,US
-1158481428,1158481436,CA
-1158481437,1158481597,US
-1158481598,1158481606,CA
-1158481607,1158481737,US
-1158481738,1158481745,CA
-1158481746,1158488529,US
-1158488530,1158488542,IL
-1158488543,1158488833,US
-1158488834,1158488846,IL
-1158488847,1158493441,US
-1158493442,1158493566,CA
-1158493567,1158496497,US
-1158496498,1158496506,TC
-1158496507,1158496530,US
-1158496531,1158496539,WS
-1158496540,1158496779,US
-1158496780,1158496788,FJ
-1158496789,1158496797,BE
-1158496798,1158496806,US
-1158496807,1158496815,PE
-1158496816,1158497616,US
-1158497617,1158497625,CH
-1158497626,1158497652,US
-1158497653,1158497661,CA
-1158497662,1158497670,GE
-1158497671,1158497770,US
-1158497771,1158497779,CA
-1158497780,1158497825,US
-1158497826,1158497834,GE
-1158497835,1158497865,WS
-1158497866,1158498032,US
-1158498033,1158498041,HK
-1158498042,1158498282,US
-1158498283,1158498291,MX
-1158498292,1158498457,US
-1158498458,1158498466,GR
-1158498467,1158498778,US
-1158498779,1158498787,IT
-1158498788,1158499171,US
-1158499172,1158499179,VI
-1158499180,1158499315,US
-1158499316,1158499326,CA
-1158499327,1158499382,US
-1158499383,1158499391,AS
-1158499392,1158499400,NL
-1158499401,1158499409,FR
-1158499410,1158499584,US
-1158499585,1158499838,CA
-1158499839,1158501120,US
-1158501121,1158501374,PR
-1158501375,1158504775,US
-1158504776,1158504784,CA
-1158504785,1158504836,US
-1158504837,1158504845,JM
-1158504846,1158504863,US
-1158504864,1158504872,GR
-1158504873,1158504941,US
-1158504942,1158504950,CA
-1158504951,1158504951,US
-1158504952,1158504959,KE
-1158504960,1158505653,US
+1158381568,1158505653,US
1158505654,1158505727,AU
1158505728,1158506793,US
1158506794,1158506809,IN
@@ -10360,9 +10150,7 @@
1158526369,1158526377,CH
1158526378,1158526930,US
1158526931,1158526963,AS
-1158526964,1158538864,US
-1158538865,1158538872,WS
-1158538873,1158714111,US
+1158526964,1158714111,US
1158714112,1158714367,US
1158714368,1158724607,US
1158724608,1158724863,NL
@@ -10400,9 +10188,7 @@
1159517696,1159517951,CA
1159517952,1159518191,US
1159518192,1159518199,CA
-1159518200,1159520255,US
-1159520256,1159520767,CA
-1159520768,1159525375,US
+1159518200,1159525375,US
1159525376,1159525759,CA
1159525760,1159672319,US
1159672320,1159672831,US
@@ -10418,9 +10204,7 @@
1160364032,1160368127,CA
1160368128,1160392703,US
1160392704,1160396799,CA
-1160396800,1160409599,US
-1160409600,1160410111,CO
-1160410112,1160410287,US
+1160396800,1160410287,US
1160410288,1160410303,DO
1160410304,1160425471,US
1160425472,1160429567,CA
@@ -10430,8 +10214,7 @@
1160504320,1160507391,A2
1160507392,1160563199,US
1160563200,1160563455,GU
-1160563456,1160563711,MP
-1160563712,1160609791,US
+1160563456,1160609791,US
1160609792,1160610815,MX
1160610816,1160660417,US
1160660418,1160660418,US
@@ -10470,13 +10253,16 @@
1161424384,1161424639,KN
1161424640,1161424895,LC
1161424896,1161425151,VG
-1161425152,1161426943,AG
+1161425152,1161425407,DM
+1161425408,1161426943,AG
1161426944,1161427199,AI
1161427200,1161428223,AG
1161428224,1161428479,KN
1161428480,1161428735,AG
1161428736,1161428991,KN
-1161428992,1161437183,CA
+1161428992,1161431039,CA
+1161431040,1161433087,A2
+1161433088,1161437183,CA
1161437184,1161453567,US
1161453568,1161457663,CA
1161457664,1161576447,US
@@ -10487,7 +10273,9 @@
1161586688,1161586943,PA
1161586944,1161617407,US
1161617408,1161625599,CA
-1161625600,1161627819,US
+1161625600,1161627703,US
+1161627704,1161627711,DE
+1161627712,1161627819,US
1161627820,1161627823,CA
1161627824,1161634079,US
1161634080,1161634087,AF
@@ -10533,13 +10321,15 @@
1162461696,1162462207,GD
1162462208,1162462975,BB
1162462976,1162463999,VC
-1162464000,1162470911,BB
-1162470912,1162471167,GD
-1162471168,1162472703,BB
+1162464000,1162465279,BB
+1162465280,1162465535,GD
+1162465536,1162470911,BB
+1162470912,1162471423,GD
+1162471424,1162472703,BB
1162472704,1162472959,VC
1162472960,1162473471,BB
-1162473472,1162474495,GD
-1162474496,1162477567,BB
+1162473472,1162474751,GD
+1162474752,1162477567,BB
1162477568,1162715135,US
1162715136,1162723327,CA
1162723328,1162807295,US
@@ -10554,12 +10344,11 @@
1162831872,1162833919,PR
1162833920,1162835967,GT
1162835968,1162836223,BS
-1162836224,1162836735,CW
-1162836736,1162836991,US
+1162836224,1162836991,US
1162836992,1162838015,BS
-1162838016,1162840063,PR
-1162840064,1162853375,US
-1162853376,1162854399,PR
+1162838016,1162853375,US
+1162853376,1162853631,PR
+1162853632,1162854399,US
1162854400,1162858495,JM
1162858496,1162862591,HN
1162862592,1162870783,US
@@ -10571,7 +10360,8 @@
1162877184,1162877951,LC
1162877952,1162879999,BB
1162880000,1162882559,DM
-1162882560,1162885375,BB
+1162882560,1162883583,GD
+1162883584,1162885375,BB
1162885376,1162885631,VC
1162885632,1162887167,BB
1162887168,1163395071,US
@@ -10619,8 +10409,8 @@
1163562496,1163564031,US
1163564032,1163564543,CA
1163564544,1163564799,US
-1163564800,1163565055,CA
-1163565056,1163567103,US
+1163564800,1163565311,CA
+1163565312,1163567103,US
1163567104,1163568127,CA
1163568128,1163571199,US
1163571200,1163571967,CA
@@ -10639,8 +10429,8 @@
1163583488,1163588351,US
1163588352,1163588607,CA
1163588608,1163589119,US
-1163589120,1163589631,CA
-1163589632,1167851519,US
+1163589120,1163589375,CA
+1163589376,1167851519,US
1167851520,1168113663,CA
1168113664,1168138239,US
1168138240,1168146431,JM
@@ -10655,8 +10445,8 @@
1168394496,1168420863,US
1168420864,1168424959,CA
1168424960,1168454655,US
-1168454656,1168455167,US
-1168455168,1168474111,US
+1168454656,1168455679,US
+1168455680,1168474111,US
1168474112,1168506879,CA
1168508928,1168510975,US
1168510976,1168515071,CA
@@ -10676,8 +10466,8 @@
1168916480,1168932863,CA
1168932864,1168936959,US
1168936960,1168949247,CA
-1168949248,1168950271,US
-1168950272,1168951295,CA
+1168949248,1168950783,US
+1168950784,1168951295,CA
1168951296,1168952575,US
1168952576,1168952831,CA
1168952832,1168955903,US
@@ -10688,9 +10478,7 @@
1168957952,1168958207,CA
1168958208,1168958527,US
1168958528,1168958559,IN
-1168958560,1168961023,US
-1168961024,1168961535,CA
-1168961536,1168961887,US
+1168958560,1168961887,US
1168961888,1168961919,CA
1168961920,1168963583,US
1168963584,1168965119,CA
@@ -10702,9 +10490,7 @@
1170190336,1170190847,GB
1170190848,1170375167,US
1170375168,1170375679,US
-1170375680,1170467839,US
-1170467840,1170468351,DO
-1170468352,1170472959,US
+1170375680,1170472959,US
1170472960,1170481151,CA
1170481152,1170489343,US
1170489344,1170497535,CA
@@ -10718,9 +10504,7 @@
1176622592,1176623103,CA
1176623104,1176626119,US
1176626120,1176626135,CA
-1176626136,1176630271,US
-1176630272,1176630783,CA
-1176630784,1176631039,US
+1176626136,1176631039,US
1176631040,1176631295,CA
1176631296,1176702975,US
1176702976,1176707071,CA
@@ -10858,11 +10642,12 @@
1209338514,1209338514,US
1209338515,1209358591,US
1209358592,1209358847,DE
-1209358848,1209434111,US
+1209358848,1209359103,GB
+1209359104,1209434111,US
1209434112,1209436671,BB
1209436672,1209437183,VC
-1209437184,1209441023,BB
-1209441024,1209441279,GD
+1209437184,1209440767,BB
+1209440768,1209441279,GD
1209441280,1209442303,BB
1209442304,1209647103,US
1209647104,1209663487,CA
@@ -10887,9 +10672,7 @@
1210925056,1210941439,CA
1210941440,1211032223,US
1211032224,1211032255,VE
-1211032256,1211033087,US
-1211033088,1211033599,CO
-1211033600,1211236351,US
+1211032256,1211236351,US
1211236352,1211269119,PR
1211269120,1211303679,US
1211303680,1211303935,CA
@@ -10902,11 +10685,10 @@
1211316736,1211318271,US
1211318272,1211321343,BB
1211321344,1211322367,VC
-1211322368,1211323135,BB
-1211323136,1211323391,GD
-1211323392,1211323647,BB
-1211323648,1211323903,GD
-1211323904,1211324159,BB
+1211322368,1211322623,BB
+1211322624,1211322879,GD
+1211322880,1211323135,BB
+1211323136,1211324159,GD
1211324160,1211324927,VC
1211324928,1211333375,BB
1211333376,1211333631,VC
@@ -10934,12 +10716,10 @@
1219272704,1219276799,CA
1219276800,1220701665,US
1220701666,1220701666,US
-1220701667,1224296447,US
-1224296448,1224296959,CA
-1224296960,1224311807,US
-1224311808,1224312319,CA
-1224312320,1224470527,US
-1224470528,1224473599,NL
+1220701667,1224470527,US
+1224470528,1224471567,NL
+1224471568,1224471568,RU
+1224471569,1224473599,NL
1224473600,1224474623,US
1224474624,1224475647,GT
1224475648,1224477695,US
@@ -10996,9 +10776,7 @@
1247027200,1247034367,A2
1247034368,1247034623,US
1247034624,1247035391,A2
-1247035392,1247073791,US
-1247073792,1247074303,A2
-1247074304,1247123455,US
+1247035392,1247123455,US
1247123456,1247123711,GB
1247123712,1247123967,US
1247123968,1247124223,LU
@@ -11064,9 +10842,7 @@
1249139712,1249140735,MF
1249140736,1249163263,US
1249163264,1249165311,CA
-1249165312,1249165823,US
-1249165824,1249166335,CA
-1249166336,1249171455,US
+1249165312,1249171455,US
1249171456,1249173503,CA
1249173504,1249191935,US
1249191936,1249193983,CA
@@ -11231,9 +11007,7 @@
1255002112,1255006207,CA
1255006208,1255047167,US
1255047168,1255055359,CA
-1255055360,1255210495,US
-1255210496,1255211007,DE
-1255211008,1255245311,US
+1255055360,1255245311,US
1255245312,1255245567,BR
1255245568,1255276543,US
1255276544,1255342079,CA
@@ -11245,9 +11019,7 @@
1255571456,1255579647,CA
1255579648,1255669759,US
1255669760,1255735295,CA
-1255735296,1255768063,US
-1255768064,1255768575,CA
-1255768576,1255907071,US
+1255735296,1255907071,US
1255907072,1255907327,PR
1255907328,1255972863,US
1255972864,1255981055,CA
@@ -11305,7 +11077,11 @@
1279963136,1279963391,IN
1279963392,1279965695,US
1279965696,1279966207,CA
-1279966208,1279969663,US
+1279966208,1279968127,US
+1279968128,1279968255,CA
+1279968256,1279969343,US
+1279969344,1279969407,CA
+1279969408,1279969663,US
1279969664,1279969791,CA
1279969792,1279970047,US
1279970048,1279970303,CA
@@ -11380,11 +11156,7 @@
1294893056,1294925823,RS
1294925824,1294958591,DE
1294958592,1294991359,UA
-1294991360,1295009023,CZ
-1295009024,1295009407,SK
-1295009408,1295047679,CZ
-1295047680,1295048191,SK
-1295048192,1295056895,CZ
+1294991360,1295056895,CZ
1295056896,1295122431,GR
1295122432,1295253503,RU
1295253504,1295319039,UA
@@ -11404,14 +11176,13 @@
1296236672,1296236799,US
1296236800,1296237439,FR
1296237440,1296237567,IT
-1296237568,1296238079,FR
-1296238080,1296238591,DE
+1296237568,1296238591,FR
1296238592,1296239103,NL
1296239104,1296239231,FR
1296239232,1296239359,NL
1296239360,1296239615,DE
-1296239616,1296240639,FR
-1296240640,1296241151,BE
+1296239616,1296240895,FR
+1296240896,1296241151,BE
1296241152,1296241407,FR
1296241408,1296242175,NL
1296242176,1296242303,FR
@@ -11434,12 +11205,9 @@
1296251776,1296251903,DE
1296251904,1296252871,FR
1296252872,1296252879,DE
-1296252880,1296256511,FR
-1296256512,1296256840,DE
+1296252880,1296256840,FR
1296256841,1296256848,US
-1296256849,1296257023,DE
-1296257024,1296257535,US
-1296257536,1296258303,FR
+1296256849,1296258303,FR
1296258304,1296259071,NL
1296259072,1296259839,FR
1296259840,1296260351,NL
@@ -11451,9 +11219,7 @@
1296263944,1296263959,US
1296263960,1296266239,FR
1296266240,1296266751,US
-1296266752,1296268287,FR
-1296268288,1296268799,US
-1296268800,1296269055,FR
+1296266752,1296269055,FR
1296269056,1296269311,US
1296269312,1296302079,BY
1296302080,1296334847,GB
@@ -11463,8 +11229,8 @@
1296433152,1296465919,BG
1296465920,1296470015,LT
1296470016,1296473087,NO
-1296473088,1296474623,LT
-1296474624,1296476159,US
+1296473088,1296475135,LT
+1296475136,1296476159,US
1296476160,1296479743,LT
1296479744,1296482303,NO
1296482304,1296498687,LT
@@ -11552,9 +11318,7 @@
1296735488,1296735743,DE
1296735744,1296736255,FR
1296736256,1296738303,NO
-1296738304,1296738815,CH
-1296738816,1296739327,FI
-1296739328,1296740351,CH
+1296738304,1296740351,CH
1296740352,1296744447,RU
1296744448,1296746495,GB
1296746496,1296748543,SI
@@ -11617,7 +11381,6 @@
1297215488,1297217535,NL
1297217536,1297219583,RO
1297219584,1297285119,RU
-1297285120,1297350655,GR
1297350656,1297416191,FR
1297416192,1297481727,BG
1297481728,1297514495,GB
@@ -11693,13 +11456,9 @@
1297981440,1297989631,RO
1297989632,1297997823,CZ
1297997824,1298006015,IT
-1298006016,1298014207,RU
-1298014208,1298014719,LT
-1298014720,1298017279,RU
+1298006016,1298017279,RU
1298017280,1298018303,BY
-1298018304,1298019327,RU
-1298019328,1298019839,LT
-1298019840,1298020351,RU
+1298018304,1298020351,RU
1298020352,1298022399,BY
1298022400,1298030591,IT
1298030592,1298038783,RU
@@ -11737,9 +11496,7 @@
1298122752,1298124799,RU
1298124800,1298126847,IT
1298126848,1298128895,SA
-1298128896,1298129449,NL
-1298129450,1298129450,BZ
-1298129451,1298130943,NL
+1298128896,1298130943,NL
1298130944,1298132991,BG
1298132992,1298135039,FI
1298135040,1298137087,NL
@@ -11769,18 +11526,17 @@
1299010048,1299010815,BE
1299010816,1299011071,RU
1299011072,1299011327,BE
-1299011328,1299012095,NL
-1299012096,1299012607,BE
-1299012608,1299013631,NL
+1299011328,1299013631,NL
1299013632,1299015679,BE
1299015680,1299016703,NL
1299016704,1299016959,BE
-1299016960,1299017215,NL
-1299017216,1299017727,RU
+1299016960,1299017727,NL
1299017728,1299019775,BE
1299019776,1299020031,NL
1299020032,1299021823,BE
-1299021824,1299038207,CH
+1299021824,1299026111,CH
+1299026112,1299026127,ES
+1299026128,1299038207,CH
1299038208,1299054591,FI
1299054592,1299070975,SE
1299070976,1299087359,SA
@@ -11818,9 +11574,7 @@
1306267523,1306267527,NG
1306267528,1306271743,KE
1306271744,1306279935,RU
-1306279936,1306286079,IT
-1306286080,1306286591,CH
-1306286592,1306288127,IT
+1306279936,1306288127,IT
1306288128,1306296319,AT
1306296320,1306312703,RU
1306312704,1306320895,UZ
@@ -11867,10 +11621,12 @@
1307172864,1307181055,DK
1307181056,1307189247,RU
1307189248,1307191295,DE
-1307191296,1307191807,CZ
-1307191808,1307192063,US
+1307191296,1307191551,CZ
+1307191552,1307192063,US
1307192064,1307192319,GB
-1307192320,1307193343,CZ
+1307192320,1307192575,US
+1307192576,1307192831,DE
+1307192832,1307193343,CZ
1307193344,1307195391,NO
1307195392,1307197439,CH
1307197440,1307205631,HU
@@ -11910,9 +11666,7 @@
1307451392,1307459583,SE
1307459584,1307467775,BG
1307467776,1307484159,RU
-1307484160,1307491327,GB
-1307491328,1307491839,IE
-1307491840,1307492351,GB
+1307484160,1307492351,GB
1307492352,1307500543,BA
1307500544,1307508735,RU
1307508736,1307516927,BA
@@ -11941,8 +11695,8 @@
1307635712,1307637247,EE
1307637248,1307637759,LV
1307637760,1307638271,EE
-1307638272,1307639295,LT
-1307639296,1307639551,EE
+1307638272,1307638783,LT
+1307638784,1307639551,EE
1307639552,1307639807,LT
1307639808,1307643903,IT
1307643904,1307652095,RU
@@ -11975,9 +11729,8 @@
1307742208,1307746303,HU
1307746304,1307750399,UA
1307750400,1307754495,IT
-1307754496,1307755519,US
-1307755520,1307756543,GB
-1307756544,1307757311,FR
+1307754496,1307756799,GB
+1307756800,1307757311,FR
1307757312,1307758591,GB
1307758592,1307762687,SM
1307762688,1307766783,PL
@@ -12037,8 +11790,7 @@
1307967488,1307971583,IT
1307971584,1307979775,GB
1307979776,1307981823,ZW
-1307981824,1307982847,ZA
-1307982848,1307983871,GB
+1307981824,1307983871,GB
1307983872,1307984383,NG
1307984384,1307987967,LB
1307987968,1307992063,FR
@@ -12061,7 +11813,6 @@
1308049408,1308053503,DK
1308053504,1308055551,DE
1308055552,1308057599,AL
-1308057600,1308061695,GR
1308061696,1308069887,RU
1308069888,1308073983,NO
1308073984,1308078079,RU
@@ -12095,7 +11846,6 @@
1310212096,1310214143,HU
1310214144,1310216191,UA
1310216192,1310218239,IT
-1310220288,1310222335,NL
1310222336,1310224383,RS
1310224384,1310226431,GB
1310226432,1310228479,BE
@@ -12108,11 +11858,8 @@
1310240768,1310242815,RU
1310242816,1310244863,HU
1310244864,1310246911,EE
-1310246912,1310247935,FR
-1310247936,1310248447,CH
-1310248448,1310248959,FR
-1310248960,1310250495,IM
-1310250496,1310251007,MT
+1310246912,1310248959,FR
+1310248960,1310251007,IM
1310251008,1310255103,RU
1310255104,1310257151,CZ
1310257152,1310259199,FR
@@ -12195,7 +11942,7 @@
1311254528,1311256575,SE
1311256576,1311258623,FR
1311258624,1311262719,GB
-1311262720,1311264767,FR
+1311262720,1311264767,CH
1311264768,1311266815,RU
1311266816,1311268863,FR
1311268864,1311270911,BE
@@ -12212,8 +11959,7 @@
1311291392,1311293439,RU
1311293440,1311295487,NL
1311295488,1311297535,IT
-1311297536,1311299071,EU
-1311299072,1311299583,AT
+1311297536,1311299583,EU
1311299584,1311301631,RU
1311301632,1311303679,TR
1311303680,1311307775,GB
@@ -12389,21 +12135,17 @@
1317634048,1317638399,IE
1317638400,1317638655,GB
1317638656,1317640447,IE
-1317640448,1317643263,GB
-1317643264,1317643775,IE
-1317643776,1317644799,GB
+1317640448,1317644799,GB
1317644800,1317645311,IE
1317645312,1317645823,GB
1317645824,1317646335,IE
1317646336,1317647103,GB
1317647104,1317647359,IE
1317647360,1317647615,GB
-1317647616,1317648383,IE
-1317648384,1317650431,GB
+1317647616,1317647871,IE
+1317647872,1317650431,GB
1317650432,1317666815,PT
-1317666816,1317671935,GB
-1317671936,1317672447,GA
-1317672448,1317683199,GB
+1317666816,1317683199,GB
1317683200,1317699583,DE
1317699584,1317715967,RU
1317715968,1317732351,SA
@@ -12421,11 +12163,7 @@
1317928960,1317945343,BG
1317945344,1317978111,AT
1317978112,1317994495,RU
-1317994496,1317995007,NL
-1317995008,1317996031,DE
-1317996032,1317997055,NL
-1317997056,1317998079,DE
-1317998080,1318010879,NL
+1317994496,1318010879,NL
1318010880,1318027263,DK
1318027264,1318043647,IE
1318043648,1318584319,GB
@@ -12492,13 +12230,13 @@
1318928384,1318936575,LT
1318936576,1318944767,DK
1318944768,1318958079,CZ
-1318958080,1318960639,PL
-1318960640,1318961151,CZ
+1318958080,1318960127,PL
+1318960128,1318961151,CZ
1318961152,1318969343,GB
1318969344,1318977535,RU
1318977536,1318985727,LT
-1318985728,1319001087,GB
-1319001088,1319002111,US
+1318985728,1319000063,GB
+1319000064,1319002111,US
1319002112,1319010303,IE
1319010304,1319018495,CY
1319018496,1319026687,IR
@@ -12641,14 +12379,18 @@
1334084632,1334091775,DE
1334091776,1334099967,LT
1334099968,1334108159,IR
-1334108160,1334115327,BE
-1334115328,1334115839,RU
-1334115840,1334116351,BE
+1334108160,1334116351,BE
1334116352,1334124543,AX
-1334124544,1334130687,DE
+1334124544,1334125567,DE
+1334125568,1334126591,ES
+1334126592,1334130687,DE
1334130688,1334131711,NL
1334131712,1334132735,DE
-1334132736,1334165503,RU
+1334132736,1334140927,RU
+1334140928,1334141951,GB
+1334141952,1334142975,RU
+1334142976,1334143999,GB
+1334144000,1334165503,RU
1334165504,1334173695,PL
1334173696,1334181887,LT
1334181888,1334190079,RU
@@ -12657,7 +12399,8 @@
1334206464,1334214655,FI
1334214656,1334222847,JO
1334222848,1334231039,BG
-1334231040,1334239231,EE
+1334231040,1334233087,EE
+1334233088,1334239231,RU
1334239232,1334247423,IS
1334247424,1334255615,NO
1334255616,1334263807,IT
@@ -12717,11 +12460,7 @@
1334645223,1334645223,US
1334645224,1334645226,DE
1334645227,1334645227,US
-1334645228,1334645247,DE
-1334645248,1334645759,IQ
-1334645760,1334646271,DE
-1334646272,1334646783,IQ
-1334646784,1334647039,DE
+1334645228,1334647039,DE
1334647040,1334647807,IQ
1334647808,1334648831,DE
1334648832,1334652927,GB
@@ -12731,11 +12470,22 @@
1334669312,1334673407,MK
1334673408,1334677503,GB
1334677504,1334681599,FI
-1334681600,1334682367,GB
+1334681600,1334681855,PL
+1334681856,1334682111,GB
+1334682112,1334682367,IE
1334682368,1334682623,FR
1334682624,1334683391,GB
1334683392,1334683647,CH
-1334683648,1334685695,GB
+1334683648,1334683903,GB
+1334683904,1334684031,DE
+1334684032,1334684159,NL
+1334684160,1334684415,SE
+1334684416,1334684479,GB
+1334684480,1334684511,DE
+1334684512,1334684671,GB
+1334684672,1334684927,FI
+1334684928,1334685183,NL
+1334685184,1334685695,DE
1334685696,1334689791,IT
1334689792,1334693887,FR
1334693888,1334702079,RU
@@ -12746,9 +12496,7 @@
1334710272,1334714367,RU
1334714368,1334718463,DE
1334718464,1334722559,KZ
-1334722560,1334725631,NL
-1334725632,1334726143,SE
-1334726144,1334726655,LU
+1334722560,1334726655,NL
1334726656,1334729983,RU
1334729984,1334730111,KZ
1334730112,1334730495,RU
@@ -12795,9 +12543,7 @@
1336551424,1336553471,GB
1336553472,1336555519,SA
1336555520,1336557567,BE
-1336557568,1336558591,ES
-1336558592,1336559103,US
-1336559104,1336559615,ES
+1336557568,1336559615,ES
1336559616,1336561663,GB
1336561664,1336563711,NO
1336563712,1336567807,NL
@@ -12835,7 +12581,8 @@
1336627200,1336629247,NO
1336629248,1336631295,DE
1336631296,1336633343,IS
-1336633344,1336635391,ES
+1336633344,1336634879,ES
+1336634880,1336635391,PT
1336635392,1336637439,RU
1336637440,1336639487,UA
1336639488,1336643583,HU
@@ -13008,14 +12755,12 @@
1346555904,1346559999,IT
1346560000,1346564095,LI
1346564096,1346568191,EE
-1346568192,1346571775,SE
-1346571776,1346572287,SE
+1346568192,1346572287,SE
1346572288,1346576383,DE
1346576384,1346580479,DK
1346580480,1346584575,RU
1346584576,1346588159,US
-1346588160,1346588671,KR
-1346588672,1346588927,EU
+1346588160,1346588927,EU
1346588928,1346589439,US
1346589440,1346589695,DE
1346589696,1346592767,US
@@ -13023,9 +12768,7 @@
1346596864,1346600959,IT
1346605056,1346609151,CH
1346609152,1346617343,FR
-1346617344,1346620415,SE
-1346620416,1346620927,DK
-1346620928,1346621439,SE
+1346617344,1346621439,SE
1346621440,1346625535,RU
1346625536,1346629631,DE
1346629632,1346637823,RU
@@ -13034,7 +12777,6 @@
1346654208,1346658303,GB
1346658304,1346666495,SE
1346666496,1346670591,ES
-1346670592,1346674687,IT
1346674688,1346678783,DE
1346678784,1346686975,IT
1346686976,1346691071,GB
@@ -13133,15 +12875,9 @@
1347129344,1347133439,FR
1347133440,1347141631,EG
1347141632,1347145727,CH
-1347145728,1347146239,IN
-1347146240,1347147263,CA
-1347147264,1347147775,GB
-1347147776,1347148287,DE
-1347148288,1347149823,CA
+1347145728,1347149823,CA
1347149824,1347151423,HU
-1347151424,1347151615,AT
-1347151616,1347153151,HU
-1347153152,1347158015,AT
+1347151424,1347158015,AT
1347158016,1347162111,CH
1347162112,1347166207,IT
1347166208,1347174399,GR
@@ -13205,8 +12941,7 @@
1347293529,1347293536,NG
1347293537,1347293544,GH
1347293545,1347293552,NG
-1347293553,1347293559,ZM
-1347293560,1347293560,A2
+1347293553,1347293560,A2
1347293561,1347293568,GN
1347293569,1347293576,NG
1347293577,1347293584,GN
@@ -13472,8 +13207,8 @@
1347579904,1347588095,GB
1347588096,1347592191,CZ
1347592192,1347600383,RU
-1347600384,1347601919,CZ
-1347601920,1347602431,UA
+1347600384,1347601407,CZ
+1347601408,1347602431,UA
1347602432,1347608575,DE
1347608576,1347612671,FR
1347612672,1347616767,GB
@@ -13486,16 +13221,14 @@
1347649536,1347653631,GE
1347653632,1347657727,GB
1347657728,1347661823,IT
-1347661824,1347664895,DE
-1347664896,1347665407,NL
-1347665408,1347665919,DE
+1347661824,1347665919,DE
1347665920,1347670015,RU
1347670016,1347674111,SE
1347674112,1347682303,RU
-1347682304,1347686399,DE
-1347686400,1347688959,EU
-1347688960,1347689343,BE
-1347689344,1347690495,EU
+1347682304,1347682559,DE
+1347682560,1347682815,A2
+1347682816,1347686399,DE
+1347686400,1347690495,EU
1347690496,1347694591,SE
1347694592,1347706879,GB
1347706880,1347710975,IT
@@ -13531,23 +13264,21 @@
1347837952,1347846143,RO
1347846144,1347850239,NO
1347850240,1347854335,IT
-1347854336,1347854599,EU
+1347854336,1347854591,DE
+1347854592,1347854599,EU
1347854600,1347854607,DE
1347854608,1347854655,EU
1347854656,1347854719,DE
1347854720,1347855615,EU
1347855616,1347856127,DE
-1347856128,1347856895,EU
-1347856896,1347858431,DE
+1347856128,1347857407,EU
+1347857408,1347858431,DE
1347858432,1347858687,EU
1347858688,1347858943,DE
-1347858944,1347859967,EU
-1347859968,1347860479,DE
-1347860480,1347862089,EU
+1347858944,1347862089,EU
1347862090,1347862090,DE
-1347862091,1347862335,EU
-1347862336,1347862399,DE
-1347862400,1347862527,EU
+1347862091,1347862271,EU
+1347862272,1347862527,DE
1347862528,1347866623,CH
1347866624,1347870719,NO
1347870720,1347874815,AM
@@ -13567,6 +13298,7 @@
1347932160,1347936255,SK
1347936256,1347940351,FR
1347940352,1347944447,BA
+1347945472,1347946495,NG
1347947520,1347948543,DZ
1347948544,1347952639,DE
1347952640,1347956735,BE
@@ -13610,8 +13342,8 @@
1348116480,1348120575,JO
1348120576,1348124671,RU
1348124672,1348128767,GB
-1348128768,1348129279,BE
-1348129280,1348132351,SI
+1348128768,1348129791,BE
+1348129792,1348132351,SI
1348132352,1348132863,BE
1348132864,1348136959,UA
1348136960,1348141055,RU
@@ -13649,9 +13381,7 @@
1348255744,1348263935,RU
1348263936,1348268031,UA
1348268032,1348272127,CZ
-1348272128,1348275199,IE
-1348275200,1348275711,GB
-1348275712,1348280319,IE
+1348272128,1348280319,IE
1348280320,1348284415,AT
1348284416,1348288511,RU
1348288512,1348292607,IT
@@ -13678,9 +13408,7 @@
1348362240,1348366335,MC
1348366336,1348368227,IT
1348368228,1348368228,A2
-1348368229,1348368895,IT
-1348368896,1348369151,A2
-1348369152,1348370431,IT
+1348368229,1348370431,IT
1348370432,1348374527,CZ
1348374528,1348378623,CH
1348378624,1348382719,BY
@@ -13695,11 +13423,7 @@
1348419584,1348427775,HU
1348427776,1348435967,CZ
1348435968,1348440063,FI
-1348440064,1348442111,NL
-1348442112,1348442623,DE
-1348442624,1348443135,NL
-1348443136,1348443647,DE
-1348443648,1348448255,NL
+1348440064,1348448255,NL
1348448256,1348456447,GB
1348456448,1348460543,BH
1348460544,1348464639,SI
@@ -13764,13 +13488,17 @@
1352412160,1352412415,FR
1352412416,1352412799,DE
1352412800,1352412927,GB
-1352412928,1352663039,DE
+1352412928,1352417279,DE
+1352417280,1352418303,SK
+1352418304,1352663039,DE
1352663040,1353187327,DK
1353187328,1353258239,GB
1353258240,1353258263,SE
1353258264,1353258271,NO
1353258272,1353258495,SE
-1353258496,1353266959,GB
+1353258496,1353262295,GB
+1353262296,1353262303,US
+1353262304,1353266959,GB
1353266960,1353266975,IE
1353266976,1353267711,GB
1353267712,1353267967,IE
@@ -13788,7 +13516,9 @@
1353286256,1353286271,GB
1353286272,1353286303,EU
1353286304,1353286311,GB
-1353286312,1353286397,EU
+1353286312,1353286335,EU
+1353286336,1353286367,GB
+1353286368,1353286397,EU
1353286398,1353286398,GB
1353286399,1353286399,EU
1353286400,1353288191,GB
@@ -13799,20 +13529,16 @@
1353298688,1353299455,SE
1353299456,1353300079,GB
1353300080,1353300095,SE
-1353300096,1353306111,GB
-1353306112,1353306623,ES
-1353306624,1353306695,GB
-1353306696,1353306703,BE
-1353306704,1353308159,GB
+1353300096,1353308159,GB
1353308160,1353309183,FR
-1353309184,1353312255,GB
-1353312256,1353312767,CH
+1353309184,1353312447,GB
+1353312448,1353312479,CH
+1353312480,1353312767,GB
1353312768,1353313023,IT
1353313024,1353313535,GB
1353313536,1353313791,IE
-1353313792,1353314303,GB
-1353314304,1353314815,CH
-1353314816,1353316351,ES
+1353313792,1353315327,GB
+1353315328,1353316351,ES
1353316352,1353318399,GB
1353318400,1353383935,SE
1353383936,1353449471,DE
@@ -13867,43 +13593,30 @@
1357119488,1357185023,DE
1357185024,1357250559,GB
1357250560,1357316095,IL
-1357316096,1357316607,EU
-1357316608,1357317119,LU
+1357316096,1357317119,EU
1357317120,1357317375,GB
1357317376,1357317631,A2
-1357317632,1357318143,LY
+1357317632,1357318143,EU
1357318144,1357320191,QA
-1357320192,1357320703,FR
-1357320704,1357321983,EU
+1357320192,1357321983,EU
1357321984,1357322239,GB
1357322240,1357322495,EU
1357322496,1357322751,DE
-1357322752,1357323263,BH
-1357323264,1357323519,EU
+1357322752,1357323519,EU
1357323520,1357323775,GB
1357323776,1357324287,EU
1357324288,1357325311,GB
1357325312,1357327359,EU
1357327360,1357328383,DE
-1357328384,1357330943,EU
-1357330944,1357331455,ES
-1357331456,1357338111,EU
-1357338112,1357338623,FR
-1357338624,1357340671,EU
+1357328384,1357340671,EU
1357340672,1357341695,GB
1357341696,1357342975,EU
1357342976,1357343231,GB
1357343232,1357343487,EU
1357343488,1357343503,GB
-1357343504,1357349887,EU
-1357349888,1357350399,ES
-1357350400,1357350911,QA
-1357350912,1357351935,EU
-1357351936,1357352447,GB
-1357352448,1357357055,EU
-1357357056,1357357567,ES
-1357357568,1357358079,DE
-1357358080,1357359871,EU
+1357343504,1357351167,EU
+1357351168,1357351423,PL
+1357351424,1357359871,EU
1357359872,1357360015,GB
1357360016,1357360031,IT
1357360032,1357360271,GB
@@ -13913,25 +13626,17 @@
1357361152,1357363199,GB
1357363200,1357364223,QA
1357364224,1357365247,ES
-1357365248,1357365759,DZ
-1357365760,1357366015,EU
+1357365248,1357366015,EU
1357366016,1357366271,KM
1357366272,1357366783,EU
1357366784,1357366959,GB
1357366960,1357366967,BE
1357366968,1357367039,GB
-1357367040,1357368319,EU
-1357368320,1357368831,GN
-1357368832,1357369343,ES
-1357369344,1357370367,EU
-1357370368,1357370879,GB
-1357370880,1357371391,EU
+1357367040,1357371391,EU
1357371392,1357371647,GB
1357371648,1357372159,EU
-1357372160,1357372927,GB
-1357372928,1357378047,EU
-1357378048,1357378559,FR
-1357378560,1357381631,EU
+1357372160,1357372415,GB
+1357372416,1357381631,EU
1357381632,1357414399,NO
1357414400,1357447167,LV
1357447168,1357479935,IE
@@ -13963,9 +13668,7 @@
1357883648,1357883903,SE
1357883904,1357886105,EU
1357886106,1357886361,SE
-1357886362,1357887487,EU
-1357887488,1357887999,FR
-1357888000,1357889023,EU
+1357886362,1357889023,EU
1357889024,1357889279,GB
1357889280,1357891071,EU
1357891072,1357891327,NL
@@ -13979,8 +13682,7 @@
1357898752,1357898879,DE
1357898880,1357899647,EU
1357899648,1357899775,GB
-1357899776,1357900287,DE
-1357900288,1357902365,EU
+1357899776,1357902365,EU
1357902366,1357902366,NO
1357902367,1357902847,EU
1357902848,1357903359,GB
@@ -14132,8 +13834,7 @@
1358381056,1358385151,IT
1358385152,1358389247,GB
1358389248,1358397439,RU
-1358397440,1358397951,A2
-1358397952,1358398463,TZ
+1358397440,1358398463,A2
1358398464,1358399487,GB
1358399488,1358401279,A2
1358401280,1358401535,KE
@@ -14206,15 +13907,15 @@
1358647296,1358651391,DE
1358651392,1358655487,FR
1358655488,1358667775,RU
-1358667776,1358668287,GB
+1358667776,1358668159,GB
+1358668160,1358668167,PT
+1358668168,1358668287,GB
1358668288,1358668799,PT
1358668800,1358669823,GB
1358669824,1358670079,PT
1358670080,1358671359,GB
1358671360,1358671615,PT
-1358671616,1358672895,GB
-1358672896,1358673407,PT
-1358673408,1358675967,GB
+1358671616,1358675967,GB
1358675968,1358677247,SE
1358677248,1358677759,DK
1358677760,1358679039,SE
@@ -14240,14 +13941,11 @@
1358770176,1358774271,BG
1358774272,1358778367,ES
1358778368,1358782463,CH
-1358782464,1358786559,GB
-1358786560,1358787071,NL
-1358787072,1358787327,GB
+1358782464,1358787327,GB
1358787328,1358787583,IE
1358787584,1358790655,GB
1358790656,1358798847,IR
-1358798848,1358799359,DE
-1358799360,1358802943,HR
+1358798848,1358802943,HR
1358802944,1358807039,HU
1358807040,1358811135,ES
1358811136,1358815231,DE
@@ -14271,13 +13969,15 @@
1358861451,1358861473,EU
1358861474,1358861474,DE
1358861475,1358861567,EU
-1358861568,1358861823,GB
-1358861824,1358862079,FR
-1358862080,1358862847,GB
+1358861568,1358861823,DE
+1358861824,1358862335,FR
+1358862336,1358862847,US
1358862848,1358862898,DK
1358862899,1358862899,NO
1358862900,1358863103,DK
-1358863104,1358864383,GB
+1358863104,1358863359,CH
+1358863360,1358863615,US
+1358863616,1358864383,GB
1358864384,1358872575,CH
1358872576,1358876671,IT
1358876672,1358880767,LV
@@ -14387,12 +14087,9 @@
1360113664,1360117759,HU
1360117760,1360121855,FI
1360121856,1360125951,DE
-1360125952,1360126975,SI
-1360126976,1360127487,HR
-1360127488,1360127999,RS
-1360128000,1360128511,MK
-1360128512,1360129023,SI
-1360129024,1360130047,BA
+1360125952,1360129023,SI
+1360129024,1360129279,BA
+1360129280,1360130047,SI
1360130048,1360134143,IE
1360134144,1360138239,NL
1360138240,1360142335,CH
@@ -14407,8 +14104,7 @@
1360191488,1360195583,FO
1360195584,1360199679,NL
1360199680,1360203775,CZ
-1360203776,1360207359,FR
-1360207360,1360207871,US
+1360203776,1360207871,FR
1360207872,1360210943,CZ
1360210944,1360211199,EU
1360211200,1360211967,CZ
@@ -14546,8 +14242,8 @@
1360822272,1360826367,AT
1360826368,1360830463,GB
1360830464,1360838655,RU
-1360838656,1360839167,CH
-1360839168,1360842751,FR
+1360838656,1360838911,CH
+1360838912,1360842751,FR
1360842752,1360846847,RU
1360846848,1360850943,DE
1360855040,1360859135,NL
@@ -14590,27 +14286,21 @@
1361042432,1361043455,PL
1361043456,1361051647,IR
1361051648,1362100223,ES
-1362100224,1362396415,FR
-1362396416,1362396735,US
-1362396736,1362398463,FR
+1362100224,1362398463,FR
1362398464,1362398719,DE
-1362398720,1362403583,FR
-1362403584,1362404095,DZ
-1362404096,1362404607,FR
+1362398720,1362404607,FR
1362404608,1362405887,DZ
1362405888,1362406143,FR
1362406144,1362407167,SV
1362407168,1362411519,FR
1362411520,1362413273,MQ
-1362413274,1362414335,FR
-1362414336,1362414847,US
+1362413274,1362414847,FR
1362414848,1362415103,GB
1362415104,1362415359,FR
1362415360,1362415615,DE
1362415616,1362417663,GP
1362417664,1362419711,SG
-1362419712,1362423295,FR
-1362423296,1362423807,VE
+1362419712,1362423807,FR
1362423808,1362425855,SG
1362425856,1362426495,US
1362426496,1362426879,FR
@@ -14637,23 +14327,15 @@
1364525312,1364525567,A2
1364525568,1364526591,NL
1364526592,1364528639,GB
-1364528640,1364528895,NL
-1364528896,1364529407,GB
-1364529408,1364529663,NL
-1364529664,1364530175,GB
-1364530176,1364577791,NL
-1364577792,1364578303,GB
-1364578304,1364579839,NL
+1364528640,1364579839,NL
1364579840,1364580095,US
1364580096,1364581375,NL
1364581376,1364582399,LY
1364582400,1364583423,US
1364583424,1364585727,NL
1364585728,1364585983,CA
-1364585984,1364586240,LB
-1364586241,1364586495,NL
-1364586496,1364586752,LB
-1364586753,1364588977,NL
+1364585984,1364586239,LB
+1364586240,1364588977,NL
1364588978,1364588978,US
1364588979,1364589567,NL
1364589568,1364589823,A2
@@ -14824,8 +14506,8 @@
1369657344,1369659391,RU
1369659392,1369661439,UA
1369661440,1369665535,RU
-1369665536,1369677823,UA
-1369677824,1369686015,RU
+1369665536,1369677824,UA
+1369677825,1369686015,RU
1369686016,1369690111,PL
1369690112,1369694207,UA
1369694208,1369702399,RU
@@ -14870,10 +14552,10 @@
1370488832,1370619903,RU
1370619904,1370750975,GB
1370750976,1370767359,RO
-1370767360,1370771455,MD
-1370771456,1370772479,RO
-1370772480,1370772991,MD
-1370772992,1370882047,RO
+1370767360,1370768895,MD
+1370768896,1370769407,RO
+1370769408,1370771455,MD
+1370771456,1370882047,RO
1370882048,1371013119,HU
1371013120,1371078655,ES
1371078656,1371144191,FR
@@ -14896,9 +14578,7 @@
1371996672,1371996927,GA
1371996928,1371997183,A2
1371997184,1371997439,KE
-1371997440,1371997695,A2
-1371997696,1371998207,NG
-1371998208,1371998463,A2
+1371997440,1371998463,A2
1371998464,1371998719,NG
1371998720,1372000255,A2
1372000256,1372004351,UG
@@ -14908,16 +14588,15 @@
1372012544,1372013567,ZM
1372013568,1372020735,A2
1372020736,1372022783,ZM
-1372022784,1372025855,A2
-1372025856,1372026367,IL
+1372022784,1372026367,A2
1372026368,1372026879,KE
1372026880,1372027903,IL
1372027904,1372043519,A2
1372043520,1372043775,NG
1372043776,1372045567,A2
1372045568,1372045823,ZM
-1372045824,1372060159,A2
-1372060160,1372061695,IL
+1372045824,1372060671,A2
+1372060672,1372061695,IL
1372061696,1372069887,RU
1372069888,1372073983,FR
1372073984,1372078079,CZ
@@ -14953,30 +14632,22 @@
1372585984,1372618751,IT
1372618752,1372651519,GB
1372651520,1372684287,FI
-1372684288,1372684799,EU
-1372684800,1372685311,DE
-1372685312,1372688383,EU
+1372684288,1372688383,EU
1372688384,1372689407,DE
1372689408,1372689663,EU
1372689664,1372689919,DE
1372689920,1372690431,EU
1372690432,1372691455,DE
1372691456,1372692223,EU
-1372692224,1372692991,DE
-1372692992,1372693503,EU
-1372693504,1372694015,DE
-1372694016,1372695999,EU
+1372692224,1372692479,DE
+1372692480,1372695999,EU
1372696000,1372696007,DK
-1372696008,1372696831,EU
-1372696832,1372697215,DE
-1372697216,1372699135,EU
+1372696008,1372699135,EU
1372699136,1372699391,DE
-1372699392,1372701183,EU
-1372701184,1372701695,DE
-1372701696,1372704767,EU
+1372699392,1372704767,EU
1372704768,1372713983,DE
-1372713984,1372714495,EU
-1372714496,1372717055,DE
+1372713984,1372715007,EU
+1372715008,1372717055,DE
1372717056,1372749823,PL
1372749824,1372782591,DE
1372782592,1372815359,RU
@@ -14984,9 +14655,7 @@
1372848128,1373110271,TR
1373110272,1373175807,SE
1373175808,1373241343,AT
-1373241344,1373271295,IL
-1373271296,1373271551,PS
-1373271552,1373306879,IL
+1373241344,1373306879,IL
1373306880,1373372415,PL
1373372416,1373437951,FR
1373437952,1373503487,CH
@@ -15091,23 +14760,17 @@
1382039552,1382055935,DE
1382055936,1382072319,FR
1382072320,1382088703,RU
-1382088704,1382097919,FR
-1382097920,1382098431,IT
-1382098432,1382105087,FR
+1382088704,1382105087,FR
1382105088,1382137855,DE
1382137856,1382154239,RU
1382154240,1382170623,FR
-1382170624,1382183423,DE
-1382183424,1382183935,LI
-1382183936,1382187007,DE
+1382170624,1382187007,DE
1382187008,1382203391,ES
1382203392,1382205439,GB
1382205440,1382211583,EU
1382211584,1382211839,FR
1382211840,1382213631,EU
-1382213632,1382215679,GB
-1382215680,1382216191,NL
-1382216192,1382219775,GB
+1382213632,1382219775,GB
1382219776,1382222847,SE
1382222848,1382223103,FI
1382223104,1382252543,SE
@@ -15125,7 +14788,6 @@
1382432768,1382449151,CY
1382449152,1382465535,IL
1382465536,1382481919,PS
-1382481920,1382498303,AT
1382498304,1382514687,BG
1382514688,1382531071,DK
1382531072,1382547455,FI
@@ -15193,8 +14855,7 @@
1383325696,1383333887,GB
1383333888,1383350271,RU
1383350272,1383358463,NO
-1383358464,1383367167,DE
-1383367168,1383367679,KW
+1383358464,1383367679,DE
1383367680,1383368703,GB
1383368704,1383368957,DE
1383368958,1383368958,US
@@ -15224,7 +14885,13 @@
1383469056,1383471103,UA
1383471104,1383473151,SE
1383473152,1383481343,DE
-1383481344,1383497727,GB
+1383481344,1383481599,GB
+1383481600,1383481615,US
+1383481616,1383481663,GB
+1383481664,1383481695,US
+1383481696,1383482623,GB
+1383482624,1383482879,NL
+1383482880,1383497727,GB
1383497728,1383505919,RU
1383505920,1383514111,SA
1383514112,1383522303,FI
@@ -15268,29 +14935,7 @@
1384759296,1384775679,SY
1384775680,1384792063,RU
1384792064,1384808447,FR
-1384808448,1384809471,EU
-1384809472,1384809983,US
-1384809984,1384810495,EU
-1384810496,1384811007,US
-1384811008,1384811519,GB
-1384811520,1384813567,EU
-1384813568,1384814079,ES
-1384814080,1384814591,GB
-1384814592,1384815103,BE
-1384815104,1384815615,FR
-1384815616,1384816127,BE
-1384816128,1384816639,EU
-1384816640,1384817151,DK
-1384817152,1384819199,EU
-1384819200,1384819711,GB
-1384819712,1384820223,CH
-1384820224,1384820735,BE
-1384820736,1384821759,EU
-1384821760,1384822271,DK
-1384822272,1384822783,ES
-1384822784,1384823295,BE
-1384823296,1384823807,CH
-1384823808,1384824831,EU
+1384808448,1384824831,EU
1384824832,1384841215,GB
1384841216,1384857599,PL
1384857600,1384873983,NL
@@ -15325,8 +14970,8 @@
1385259008,1385267199,IT
1385267200,1385275391,SE
1385275392,1385283583,IT
-1385283584,1385285631,DE
-1385285632,1385287679,GB
+1385283584,1385286143,DE
+1385286144,1385287679,GB
1385287680,1385291775,EU
1385291776,1385299967,TR
1385299968,1385308159,BG
@@ -15373,8 +15018,7 @@
1385567203,1385567203,FR
1385567204,1385567231,EU
1385567232,1385568255,IE
-1385568256,1385569791,EU
-1385569792,1385570303,FR
+1385568256,1385570303,EU
1385570304,1385578495,HU
1385578496,1385580543,TR
1385580544,1385580799,DK
@@ -15404,15 +15048,7 @@
1386348544,1386414079,RU
1386414080,1386479615,GB
1386479616,1386545151,NO
-1386545152,1386549759,DE
-1386549760,1386550271,ES
-1386550272,1386586111,DE
-1386586112,1386586623,GB
-1386586624,1386587135,FR
-1386587136,1386587647,IT
-1386587648,1386590207,DE
-1386590208,1386590719,GB
-1386590720,1386602495,DE
+1386545152,1386602495,DE
1386602496,1386610687,US
1386610688,1386676223,IL
1386676224,1386741759,SA
@@ -15441,8 +15077,8 @@
1388389168,1388390143,NG
1388390144,1388390167,IT
1388390168,1388394495,NG
-1388394496,1388396031,IT
-1388396032,1388396543,NG
+1388394496,1388395519,IT
+1388395520,1388396543,NG
1388396544,1388404735,LV
1388404736,1388412927,UA
1388412928,1388421119,RU
@@ -15466,9 +15102,9 @@
1388568576,1388570841,CH
1388570842,1388570842,CH
1388570843,1388576767,CH
-1388576768,1388584959,FR
-1388584960,1388585983,GB
-1388585984,1388587519,EU
+1388576768,1388580863,NL
+1388580864,1388584959,FR
+1388584960,1388587519,EU
1388587520,1388588031,GB
1388588032,1388588287,EU
1388588288,1388588543,GB
@@ -15490,19 +15126,16 @@
1388658688,1388666879,GB
1388666880,1388667391,RE
1388667392,1388675071,FR
-1388675072,1388675583,EU
-1388675584,1388676607,DE
-1388676608,1388678143,EU
+1388675072,1388678143,EU
1388678144,1388679167,DE
1388679168,1388679679,EU
1388679680,1388680703,DE
-1388680704,1388682751,EU
-1388682752,1388683263,DE
+1388680704,1388683263,EU
1388683264,1388691455,CH
1388691456,1388699647,NL
1388699648,1388707839,SE
-1388707840,1388708607,LB
-1388708608,1388711679,RU
+1388707840,1388708095,LB
+1388708096,1388711679,RU
1388711680,1388711935,LB
1388711936,1388714239,RU
1388714240,1388714495,LB
@@ -15518,8 +15151,8 @@
1388741632,1388741887,GB
1388741888,1388742143,IE
1388742144,1388743167,GB
-1388743168,1388743423,IE
-1388743424,1388743679,GB
+1388743168,1388743435,IE
+1388743436,1388743679,GB
1388743680,1388744191,IE
1388744192,1388744959,GB
1388744960,1388745215,IE
@@ -15544,8 +15177,7 @@
1388796683,1388797951,NL
1388797952,1388806143,RU
1388806144,1388814335,DE
-1388814336,1388821503,AX
-1388821504,1388822527,SE
+1388814336,1388822527,AX
1388822528,1388830719,AM
1388830720,1388838911,FI
1388838912,1388871679,RU
@@ -15563,18 +15195,14 @@
1389199872,1389200159,US
1389200160,1389210627,A2
1389210628,1389210631,US
-1389210632,1389214719,A2
-1389214720,1389215743,LY
-1389215744,1389218303,A2
-1389218304,1389219839,AF
+1389210632,1389218815,A2
+1389218816,1389219839,AF
1389219840,1389223935,A2
1389223936,1389224191,US
1389224192,1389231359,A2
1389231360,1389231615,EU
1389231616,1389232127,A2
-1389232128,1389264127,DE
-1389264128,1389264639,ES
-1389264640,1389264895,DE
+1389232128,1389264895,DE
1389264896,1389265151,TZ
1389265152,1389266957,A2
1389266958,1389266958,NG
@@ -15604,9 +15232,7 @@
1389445120,1389461503,RU
1389461504,1389477887,SE
1389477888,1389494271,BY
-1389494272,1389504511,DE
-1389504512,1389505023,FR
-1389505024,1389510655,DE
+1389494272,1389510655,DE
1389510656,1389527039,NL
1389527040,1389543423,PL
1389543424,1389557247,DE
@@ -15631,11 +15257,9 @@
1389707264,1389723647,IT
1389723648,1389756415,ES
1389756416,1389772799,SE
-1389772800,1389778431,SI
-1389778432,1389780479,RS
-1389780480,1389780991,SI
-1389780992,1389782527,HR
-1389782528,1389783039,SI
+1389772800,1389780991,SI
+1389780992,1389782015,HR
+1389782016,1389783039,SI
1389783040,1389785087,BA
1389785088,1389787135,MK
1389787136,1389789183,SI
@@ -15663,12 +15287,7 @@
1390149632,1390215167,CH
1390215168,1390280703,IS
1390280704,1390346239,TR
-1390346240,1390394367,ES
-1390394368,1390394879,PT
-1390394880,1390395391,ES
-1390395392,1390396415,FR
-1390396416,1390396927,PT
-1390396928,1390411775,ES
+1390346240,1390411775,ES
1390411776,1392508927,FR
1392508928,1394606079,PL
1394606080,1396703231,ES
@@ -15717,9 +15336,7 @@
1398896640,1398898687,CH
1398898688,1398931455,ES
1398931456,1398964223,GB
-1398964224,1398983679,NL
-1398983680,1398984191,US
-1398984192,1398996991,NL
+1398964224,1398996991,NL
1398996992,1399029759,LU
1399029760,1399062527,LV
1399062528,1399095295,FI
@@ -15736,24 +15353,24 @@
1399848960,1400111103,FR
1400111104,1400373247,NL
1400373248,1400701951,DE
-1400701952,1400702463,EU
-1400702464,1400705023,DE
+1400701952,1400702207,EU
+1400702208,1400702463,DE
+1400702464,1400702975,EU
+1400702976,1400705023,DE
1400705024,1400705791,EU
1400705792,1400707071,DE
-1400707072,1400708095,EU
-1400708096,1400708607,DE
-1400708608,1400709120,EU
+1400707072,1400709120,EU
1400709121,1400710142,DE
1400710143,1400711167,EU
1400711168,1400712191,DE
1400712192,1400713215,EU
1400713216,1400718335,DE
1400718336,1400719359,EU
-1400719360,1400722431,DE
-1400722432,1400729599,EU
+1400719360,1400721407,DE
+1400721408,1400729599,EU
1400729600,1400730623,DE
-1400730624,1400731135,EU
-1400731136,1400733695,DE
+1400730624,1400731647,EU
+1400731648,1400733695,DE
1400733696,1400897535,EU
1400897536,1400963071,NL
1400963072,1401028607,DE
@@ -15762,15 +15379,11 @@
1401159680,1401225215,PT
1401225216,1401241599,DE
1401241600,1401243135,EU
-1401243136,1401244159,DE
-1401244160,1401246719,EU
+1401243136,1401243647,DE
+1401243648,1401246719,EU
1401246720,1401257983,DE
-1401257984,1401264127,EU
-1401264128,1401264639,DE
-1401264640,1401265151,EU
-1401265152,1401265663,DE
-1401265664,1401270271,EU
-1401270272,1401273343,DE
+1401257984,1401271295,EU
+1401271296,1401273343,DE
1401273344,1401273855,EU
1401273856,1401274111,DE
1401274112,1401278463,EU
@@ -15785,7 +15398,6 @@
1401427968,1401430015,RU
1401430016,1401432063,AT
1401432064,1401434111,IE
-1401434112,1401436159,RU
1401436160,1401438207,BH
1401438208,1401440255,GB
1401440256,1401444351,DE
@@ -15952,17 +15564,10 @@
1402408960,1402413055,DE
1402413056,1402417151,PL
1402417152,1402421247,DE
-1402421248,1402422783,FR
-1402422784,1402423295,GB
-1402423296,1402423807,BE
-1402423808,1402424319,FR
-1402424320,1402425855,GB
-1402425856,1402426367,FR
-1402426368,1402429439,GB
-1402429440,1402431487,US
-1402431488,1402433535,GB
-1402433536,1402434047,FR
-1402434048,1402437631,GB
+1402421248,1402422271,FR
+1402422272,1402429439,GB
+1402429440,1402430463,US
+1402430464,1402437631,GB
1402437632,1402454015,DK
1402454016,1402470399,GB
1402470400,1402994687,FR
@@ -16022,12 +15627,15 @@
1404043264,1404051455,EE
1404051456,1404059647,HR
1404059648,1404076031,NO
-1404076032,1404076543,EE
-1404076544,1404081663,LV
-1404081664,1404083711,DE
-1404083712,1404084223,EE
+1404076032,1404077055,EE
+1404077056,1404081151,LV
+1404081152,1404082175,EE
+1404082176,1404083199,DE
+1404083200,1404084223,EE
1404084224,1404092415,NO
-1404092416,1404099327,SE
+1404092416,1404098815,SE
+1404098816,1404099071,EE
+1404099072,1404099327,SE
1404099328,1404099583,EE
1404099584,1404104191,SE
1404104192,1404104447,EE
@@ -16036,30 +15644,32 @@
1404112896,1404114943,HR
1404114944,1404116991,SE
1404116992,1404125183,NO
-1404125184,1404135423,SE
+1404125184,1404127743,SE
+1404127744,1404128255,EE
+1404128256,1404135423,SE
1404135424,1404137471,EE
1404137472,1404139519,SE
1404139520,1404141567,EE
1404141568,1404142079,SE
1404142080,1404142335,EE
-1404142336,1404151807,SE
+1404142336,1404145663,SE
+1404145664,1404146175,EE
+1404146176,1404151807,SE
1404151808,1404152063,EE
1404152064,1404163071,SE
1404163072,1404163327,EE
1404163328,1404163839,SE
1404163840,1404164095,EE
1404164096,1404164351,SE
-1404164352,1404164607,EE
-1404164608,1404166143,SE
-1404166144,1404170239,LV
-1404170240,1404174335,EE
+1404164352,1404165119,EE
+1404165120,1404166143,SE
+1404166144,1404174335,LV
1404174336,1404184063,SE
1404184064,1404184575,EE
1404184576,1404186623,SE
1404186624,1404187647,EE
1404187648,1404188671,SE
-1404188672,1404189183,LT
-1404189184,1404190719,EE
+1404188672,1404190719,EE
1404190720,1404192767,SE
1404192768,1404194815,LV
1404194816,1404195839,LT
@@ -16078,17 +15688,20 @@
1404219392,1404220415,SE
1404220416,1404221439,EE
1404221440,1404222463,RU
-1404222464,1404222975,LV
+1404222464,1404222975,EE
1404222976,1404225535,SE
1404225536,1404227071,RU
-1404227072,1404227583,HR
+1404227072,1404227583,EE
1404227584,1404231679,LV
1404231680,1404232191,EE
1404232192,1404232703,NO
-1404232704,1404233215,LV
+1404232704,1404233215,EE
1404233216,1404234239,SE
-1404234240,1404235775,HR
-1404235776,1404242687,SE
+1404234240,1404234751,EE
+1404234752,1404235775,HR
+1404235776,1404240895,SE
+1404240896,1404241407,EE
+1404241408,1404242687,SE
1404242688,1404242943,EE
1404242944,1404256255,SE
1404256256,1404305407,RU
@@ -16118,7 +15731,7 @@
1404567552,1404583935,HR
1404583936,1404600319,NO
1404600320,1404645375,SE
-1404645376,1404645887,HR
+1404645376,1404645887,EE
1404645888,1404677888,SE
1404677889,1404678143,EE
1404678144,1404764159,SE
@@ -16141,7 +15754,7 @@
1404870656,1404872703,LT
1404872704,1404874751,SE
1404874752,1404875775,LV
-1404875776,1404876799,LT
+1404875776,1404876799,EE
1404876800,1404895231,SE
1404895232,1404927999,DE
1404928000,1404944383,SE
@@ -16153,15 +15766,17 @@
1405044736,1405048831,SE
1405048832,1405050879,HR
1405050880,1405059071,AT
-1405059072,1405060607,SE
-1405060608,1405060863,EE
+1405059072,1405060095,SE
+1405060096,1405060863,EE
1405060864,1405062655,SE
1405062656,1405062911,EE
1405062912,1405063167,SE
1405063168,1405067263,NO
1405067264,1405075455,DE
1405075456,1405083647,EE
-1405083648,1405086719,SE
+1405083648,1405084671,SE
+1405084672,1405084927,EE
+1405084928,1405086719,SE
1405086720,1405086975,EE
1405086976,1405091839,SE
1405091840,1406140415,FR
@@ -16182,16 +15797,8 @@
1406697472,1406705663,GB
1406705664,1406708735,IT
1406708736,1406709247,A2
-1406709248,1406710271,IT
-1406710272,1406710783,A2
-1406710784,1406710927,IT
-1406710928,1406711295,A2
-1406711296,1406712831,IT
-1406712832,1406713343,A2
-1406713344,1406713855,IT
-1406713856,1406716927,NL
-1406716928,1406717439,AT
-1406717440,1406717951,NL
+1406709248,1406713855,IT
+1406713856,1406717951,NL
1406717952,1406719487,GB
1406719488,1406719743,AT
1406719744,1406719999,GB
@@ -16238,12 +15845,13 @@
1406894080,1406902271,RU
1406902272,1406910463,AT
1406910464,1406918655,SE
-1406918656,1406926335,RU
-1406926336,1406926847,DE
+1406918656,1406926847,RU
1406926848,1406935039,IT
1406935040,1406951423,RU
1406951424,1406959615,PL
-1406959616,1406967807,DE
+1406959616,1406964351,DE
+1406964352,1406964479,NL
+1406964480,1406967807,DE
1406967808,1406975999,RU
1406976000,1406984191,IE
1406984192,1407000575,RU
@@ -16284,13 +15892,11 @@
1407532800,1407533055,US
1407533056,1407534365,GB
1407534366,1407534366,NG
-1407534367,1407535103,GB
-1407535104,1407535615,GA
+1407534367,1407535359,GB
+1407535360,1407535615,GA
1407535616,1407536127,GB
1407536128,1407536639,GA
-1407536640,1407547391,GB
-1407547392,1407547903,NG
-1407547904,1407549439,GB
+1407536640,1407549439,GB
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
@@ -16335,8 +15941,8 @@
1408532480,1408579583,GB
1408579584,1408579839,IE
1408579840,1408584191,GB
-1408584192,1408584703,IE
-1408584704,1408597503,GB
+1408584192,1408584447,IE
+1408584448,1408597503,GB
1408597504,1408598015,IE
1408598016,1408630783,FI
1408630784,1408634879,RO
@@ -16345,15 +15951,11 @@
1408696320,1408729087,NL
1408729088,1408761855,ES
1408761856,1409286143,SE
-1409286144,1409362431,HU
-1409362432,1409362943,BG
-1409362944,1409363455,HU
-1409363456,1409363967,BG
-1409363968,1409378679,HU
+1409286144,1409378679,HU
1409378680,1409378687,RO
-1409378688,1409413631,HU
-1409413632,1409415167,BG
-1409415168,1409430271,HU
+1409378688,1409413119,HU
+1409413120,1409413375,BG
+1409413376,1409430271,HU
1409430272,1409430783,RO
1409430784,1409548287,HU
1409548288,1409810431,FR
@@ -16364,10 +15966,11 @@
1410009088,1410009599,A2
1410009600,1410010111,US
1410010112,1410011135,A2
-1410011136,1410011647,DE
-1410011648,1410017535,A2
+1410011136,1410011391,DE
+1410011392,1410017535,A2
1410017536,1410017791,US
-1410017792,1410042367,A2
+1410017792,1410017792,DE
+1410017793,1410042367,A2
1410042368,1410042623,US
1410042624,1410043169,A2
1410043170,1410043171,US
@@ -16378,7 +15981,9 @@
1410203648,1410212863,FR
1410212864,1410213119,GB
1410213120,1410269183,FR
-1410269184,1410318335,LT
+1410269184,1410303999,LT
+1410304000,1410306047,LV
+1410306048,1410318335,LT
1410318336,1410319359,LV
1410319360,1410322431,LT
1410322432,1410326527,LV
@@ -16436,9 +16041,7 @@
1410727936,1410736127,BG
1410736128,1410744319,RS
1410744320,1410748415,A2
-1410748416,1410758655,DE
-1410758656,1410759167,AQ
-1410759168,1410760703,DE
+1410748416,1410760703,DE
1410760704,1410768895,RU
1410768896,1410777087,GB
1410777088,1410785279,RU
@@ -16491,8 +16094,6 @@
1411883008,1411887103,PL
1411887104,1411889151,IR
1411889152,1411891199,IT
-1411891200,1411893247,IQ
-1411893248,1411895295,FR
1411895296,1411899391,SI
1411899392,1411901439,ES
1411901440,1411903487,IE
@@ -16505,13 +16106,9 @@
1411940352,1411973119,PL
1411973120,1411999999,SI
1412000000,1412000511,BA
-1412000512,1412001791,SI
-1412001792,1412002303,RO
-1412002304,1412002815,SI
+1412000512,1412002815,SI
1412002816,1412003839,BA
-1412003840,1412004351,BG
-1412004352,1412004863,BA
-1412004864,1412005887,SI
+1412003840,1412005887,SI
1412005888,1412038655,NL
1412038656,1412071423,RU
1412071424,1412104191,CZ
@@ -16525,8 +16122,8 @@
1412366336,1412399103,SK
1412399104,1412415487,RU
1412415488,1412416511,AE
-1412416512,1412420095,IR
-1412420096,1412420607,AE
+1412416512,1412419583,IR
+1412419584,1412420607,AE
1412420608,1412423679,IR
1412423680,1412427775,AE
1412427776,1412431871,IR
@@ -16582,10 +16179,13 @@
1417150464,1417674751,ES
1417674752,1421869055,DE
1421869056,1422393343,BE
-1422393344,1422413695,DE
+1422393344,1422413567,DE
+1422413568,1422413695,AT
1422413696,1422413727,US
1422413728,1422491647,DE
-1422491648,1422508031,RU
+1422491648,1422495615,RU
+1422495616,1422495679,NL
+1422495680,1422508031,RU
1422508032,1422512127,BG
1422512128,1422516223,PL
1422516224,1422520319,BY
@@ -16601,9 +16201,7 @@
1422761984,1422770175,PL
1422770176,1422786559,GR
1422786560,1422852095,HU
-1422852096,1422857087,EU
-1422857088,1422857151,FR
-1422857152,1422911231,EU
+1422852096,1422911231,EU
1422911232,1422911487,NL
1422911488,1422917119,EU
1422917120,1422917375,GB
@@ -16670,23 +16268,17 @@
1424722432,1424723199,CZ
1424723200,1424724991,DE
1424724992,1424727039,GB
-1424727040,1424727551,DE
-1424727552,1424728063,PL
-1424728064,1424728319,DE
+1424727040,1424728319,DE
1424728320,1424729855,FR
1424729856,1424730879,DE
1424730880,1424733183,IE
1424733184,1424733951,NL
1424733952,1424735103,SE
-1424735104,1424736383,DE
-1424736384,1424736895,FR
-1424736896,1424738815,DE
+1424735104,1424738815,DE
1424738816,1424739583,SE
1424739584,1424746495,DE
1424746496,1424749055,IE
-1424749056,1424751615,DE
-1424751616,1424752127,IE
-1424752128,1424752639,DE
+1424749056,1424752639,DE
1424752640,1424785407,HU
1424785408,1424818175,ES
1424818176,1424850943,RU
@@ -16759,17 +16351,11 @@
1425915904,1425932287,FI
1425932288,1425948671,GR
1425948672,1425965055,DE
-1425965056,1425967871,EU
-1425967872,1425968383,DZ
-1425968384,1425970175,EU
+1425965056,1425970175,EU
1425970176,1425970431,FR
1425970432,1425971967,EU
1425971968,1425972223,A2
-1425972224,1425976831,EU
-1425976832,1425977342,GB
-1425977343,1425977343,EU
-1425977344,1425977855,IT
-1425977856,1425980415,EU
+1425972224,1425980415,EU
1425980416,1425980671,IQ
1425980672,1425981439,A2
1425981440,1425997823,RU
@@ -16820,9 +16406,7 @@
1427111936,1427177471,DE
1427177472,1427220556,NL
1427220557,1427220557,KG
-1427220558,1427227135,NL
-1427227136,1427227647,US
-1427227648,1427236631,NL
+1427220558,1427236631,NL
1427236632,1427236633,US
1427236634,1427243007,NL
1427243008,1427308543,IT
@@ -16900,7 +16484,9 @@
1431838720,1431846911,BE
1431846912,1431855103,NO
1431855104,1431863295,NL
-1431863296,1431871487,PT
+1431863296,1431866367,PT
+1431866368,1431867391,ES
+1431867392,1431871487,PT
1431871488,1431879679,RU
1431879680,1431887871,IT
1431887872,1431896063,GB
@@ -16933,7 +16519,7 @@
1432092672,1432100863,RU
1432100864,1432109055,CZ
1432109056,1432117247,GB
-1432117248,1432125439,CY
+1432117248,1432119295,CY
1432125440,1432131583,NL
1432131584,1432133631,US
1432133632,1432150015,GB
@@ -16960,9 +16546,7 @@
1432322048,1432338431,RU
1432338432,1432346623,FR
1432346624,1433403391,TR
-1433403392,1433410047,ES
-1433410048,1433410559,US
-1433410560,1433411583,ES
+1433403392,1433411583,ES
1433411584,1433419775,RU
1433419776,1433427967,LB
1433427968,1433436159,RU
@@ -16994,8 +16578,8 @@
1433614336,1433615027,DE
1433615028,1433615028,EU
1433615029,1433615359,DE
-1433615360,1433615871,FR
-1433615872,1433616383,CH
+1433615360,1433615615,FR
+1433615616,1433616383,GB
1433616384,1433624575,AE
1433624576,1433632767,LV
1433632768,1433640959,GI
@@ -17080,21 +16664,11 @@
1434613760,1434615807,BG
1434615808,1434648575,IL
1434648576,1434681343,FI
-1434681344,1434683391,NL
-1434683392,1434684415,DE
-1434684416,1434684927,NL
-1434684928,1434685439,DE
-1434685440,1434695679,NL
-1434695680,1434696191,DE
-1434696192,1434696703,NL
+1434681344,1434696703,NL
1434696704,1434697727,DE
-1434697728,1434700031,NL
-1434700032,1434700543,DE
-1434700544,1434705919,NL
+1434697728,1434705919,NL
1434705920,1434707967,DE
-1434707968,1434711039,NL
-1434711040,1434711551,DE
-1434711552,1434714111,NL
+1434707968,1434714111,NL
1434714112,1434746879,AZ
1434746880,1434779647,CZ
1434779648,1434812415,GB
@@ -17118,8 +16692,7 @@
1436424192,1436426239,CH
1436426240,1436428287,BA
1436428288,1436430335,GB
-1436430336,1436430847,US
-1436430848,1436432383,RU
+1436430336,1436432383,RU
1436432384,1436436479,GB
1436436480,1436438527,LV
1436438528,1436440575,IT
@@ -17131,7 +16704,7 @@
1436452864,1436453314,GB
1436453315,1436453315,EU
1436453316,1436453631,GB
-1436453632,1436453887,NL
+1436453632,1436453887,EU
1436453888,1436454911,GB
1436454912,1436456959,AZ
1436456960,1436459007,GB
@@ -17176,8 +16749,22 @@
1436542976,1436545023,NL
1436545024,1436547071,DE
1436547072,1436549119,GB
-1436549120,1436745727,CZ
-1436745728,1436811263,SK
+1436549120,1436688383,CZ
+1436688384,1436692479,SK
+1436692480,1436694527,CZ
+1436694528,1436696575,SK
+1436696576,1436700671,CZ
+1436700672,1436703743,SK
+1436703744,1436715007,CZ
+1436715008,1436717567,SK
+1436717568,1436718079,CZ
+1436718080,1436725759,SK
+1436725760,1436726271,CZ
+1436726272,1436729343,SK
+1436729344,1436743679,CZ
+1436743680,1436744959,SK
+1436744960,1436745215,CZ
+1436745216,1436811263,SK
1436811264,1437073407,NO
1437073408,1437335551,FR
1437335552,1437597695,RU
@@ -17191,9 +16778,7 @@
1438384128,1438400511,FI
1438400512,1438433279,SE
1438433280,1438515199,GB
-1438515200,1438523391,DE
-1438523392,1438523903,NL
-1438523904,1438580735,DE
+1438515200,1438580735,DE
1438580736,1438646271,NL
1438646272,1438662655,RU
1438662656,1438679039,ES
@@ -17212,9 +16797,7 @@
1438842880,1438859263,SE
1438859264,1438861567,DE
1438861568,1438861599,US
-1438861600,1438861695,DE
-1438861696,1438861823,US
-1438861824,1438875647,DE
+1438861600,1438875647,DE
1438875648,1438876927,RU
1438876928,1438877183,IQ
1438877184,1438877439,A2
@@ -17390,9 +16973,7 @@
1441701888,1441710079,AT
1441710080,1441718271,SE
1441718272,1441726463,DE
-1441726464,1441729023,KW
-1441729024,1441729535,SG
-1441729536,1441734655,KW
+1441726464,1441734655,KW
1441734656,1441742847,RU
1441742848,1441751039,CZ
1441751040,1441759231,DE
@@ -17436,7 +17017,9 @@
1445433856,1445434111,BE
1445434112,1445435391,NL
1445435392,1445435647,BE
-1445435648,1445462015,NL
+1445435648,1445448127,NL
+1445448128,1445448191,BE
+1445448192,1445462015,NL
1445462016,1445986303,IE
1445986304,1446051839,DK
1446051840,1446117375,CZ
@@ -17457,9 +17040,7 @@
1446739968,1446772735,HU
1446772736,1446805503,SA
1446805504,1446838271,FI
-1446838272,1446862079,SI
-1446862080,1446862591,HR
-1446862592,1446871039,SI
+1446838272,1446871039,SI
1446871040,1446903807,CZ
1446903808,1446906879,A2
1446906880,1446907135,IQ
@@ -17553,10 +17134,15 @@
1466097664,1466099711,ES
1466099712,1466101759,PL
1466101760,1466103807,DE
-1466103808,1466104319,GB
-1466104320,1466104831,FR
-1466104832,1466105343,BE
-1466105344,1466105855,FR
+1466103808,1466104116,FR
+1466104117,1466104117,GB
+1466104118,1466104442,FR
+1466104443,1466104443,GB
+1466104444,1466104467,FR
+1466104468,1466104468,GB
+1466104469,1466105343,FR
+1466105344,1466105599,GB
+1466105600,1466105855,FR
1466105856,1466122239,PL
1466122240,1466130431,LV
1466130432,1466138623,PL
@@ -17584,9 +17170,7 @@
1466592000,1466613759,DE
1466613760,1466615807,ES
1466615808,1466616575,GB
-1466616576,1466616831,DE
-1466616832,1466617343,ES
-1466617344,1466630143,DE
+1466616576,1466630143,DE
1466630144,1466695679,IR
1466695680,1466761215,FI
1466761216,1466826751,SA
@@ -17665,8 +17249,8 @@
1475094528,1475096575,RU
1475096576,1475098623,BH
1475098624,1475101695,GB
-1475101696,1475102207,ZA
-1475102208,1475102719,GB
+1475101696,1475101951,ZA
+1475101952,1475102719,GB
1475102720,1475104767,FR
1475104768,1475106815,RU
1475106816,1475108863,SE
@@ -17696,8 +17280,7 @@
1475151872,1475153919,BE
1475153920,1475155967,GB
1475155968,1475158015,NL
-1475158016,1475159551,IS
-1475159552,1475160063,GB
+1475158016,1475160063,IS
1475160064,1475162111,RU
1475162112,1475170303,GB
1475170304,1475172351,ES
@@ -17803,25 +17386,19 @@
1475575808,1475592191,AT
1475592192,1475608575,GB
1475608576,1475624959,RU
-1475624960,1475627775,JE
-1475627776,1475628287,GB
-1475628288,1475639039,JE
+1475624960,1475639039,JE
1475639040,1475639295,GB
1475639296,1475639391,JE
1475639392,1475639399,GB
1475639400,1475639479,JE
1475639480,1475639487,GB
-1475639488,1475639559,JE
-1475639560,1475639567,GB
-1475639568,1475641343,JE
+1475639488,1475641343,JE
1475641344,1475657727,UA
1475657728,1475674111,SK
1475674112,1475690495,DE
1475690496,1475706879,CH
1475706880,1475723263,RU
-1475723264,1475725311,GB
-1475725312,1475725823,RU
-1475725824,1475726079,GB
+1475723264,1475726079,GB
1475726080,1475726335,RU
1475726336,1475726847,GB
1475726848,1475727103,RU
@@ -17833,13 +17410,11 @@
1475729664,1475729671,UA
1475729672,1475729919,GB
1475729920,1475731455,UA
-1475731456,1475732479,GB
-1475732480,1475732991,RU
-1475732992,1475735807,GB
+1475731456,1475735807,GB
1475735808,1475736063,RU
1475736064,1475738111,GB
-1475738112,1475739351,RU
-1475739352,1475739647,GB
+1475738112,1475738879,RU
+1475738880,1475739647,GB
1475739648,1475756031,BG
1475756032,1475772415,GB
1475772416,1475788799,LV
@@ -17856,12 +17431,7 @@
1475870720,1475878911,NO
1475878912,1475887103,IT
1475887104,1475895295,PL
-1475895296,1475899903,GB
-1475899904,1475900415,IE
-1475900416,1475900927,GB
-1475900928,1475901439,IE
-1475901440,1475902463,CH
-1475902464,1475903487,GB
+1475895296,1475903487,GB
1475903488,1475911679,IR
1475911680,1475919871,MD
1475919872,1475921983,IT
@@ -17922,10 +17492,8 @@
1476304896,1476313087,BG
1476313088,1476315135,FI
1476315136,1476316159,US
-1476316160,1476316671,SG
-1476316672,1476317183,CN
-1476317184,1476317695,FI
-1476317696,1476319231,DE
+1476316160,1476317183,FI
+1476317184,1476319231,DE
1476319232,1476321279,FI
1476321280,1476329471,MC
1476329472,1476337663,RU
@@ -18097,24 +17665,13 @@
1489567744,1489600511,BH
1489600512,1489633279,RU
1489633280,1489635327,IT
-1489635328,1489635838,GB
-1489635839,1489635839,EU
-1489635840,1489636863,IT
-1489636864,1489637887,EU
-1489637888,1489638399,A2
-1489638400,1489638911,EU
-1489638912,1489640447,IT
-1489640448,1489640959,EU
-1489640960,1489641471,IT
-1489641472,1489641983,EU
-1489641984,1489642495,IT
-1489642496,1489642751,EU
-1489642752,1489644543,IT
+1489635328,1489639423,EU
+1489639424,1489640447,IT
+1489640448,1489642751,EU
+1489642752,1489643519,IT
+1489643520,1489644543,EU
1489644544,1489644799,IQ
-1489644800,1489645055,A2
-1489645056,1489645567,IT
-1489645568,1489646079,A2
-1489646080,1489646335,EU
+1489644800,1489646335,EU
1489646336,1489646591,US
1489646592,1489647615,EU
1489647616,1489648639,IT
@@ -18126,13 +17683,7 @@
1489651200,1489653759,IT
1489653760,1489657855,EU
1489657856,1489659903,IT
-1489659904,1489661951,EU
-1489661952,1489662463,GB
-1489662464,1489662975,EU
-1489662976,1489663999,IT
-1489664000,1489664511,LY
-1489664512,1489665535,EU
-1489665536,1489666047,IT
+1489659904,1489666047,EU
1489666048,1489698815,GB
1489698816,1489731583,MT
1489731584,1489764351,BG
@@ -18257,9 +17808,7 @@
1494368256,1494376447,IE
1494376448,1494384639,SE
1494384640,1494392831,RU
-1494392832,1494398975,NL
-1494398976,1494399487,US
-1494399488,1494401023,NL
+1494392832,1494401023,NL
1494401024,1494409215,LV
1494409216,1494417407,FI
1494417408,1494425599,TR
@@ -18281,9 +17830,7 @@
1494581248,1494589439,RU
1494589440,1494592511,NL
1494592512,1494593535,US
-1494593536,1494594559,NL
-1494594560,1494595071,US
-1494595072,1494597631,NL
+1494593536,1494597631,NL
1494597632,1494605823,IT
1494605824,1494614015,GB
1494614016,1494616063,RU
@@ -18343,11 +17890,7 @@
1495146496,1495150591,FR
1495150592,1495151615,EU
1495151616,1495153663,FR
-1495153664,1495154175,EU
-1495154176,1495154687,FR
-1495154688,1495162367,EU
-1495162368,1495162879,US
-1495162880,1495167743,EU
+1495153664,1495167743,EU
1495167744,1495167999,FR
1495168000,1495168767,EU
1495168768,1495169023,GB
@@ -18384,8 +17927,7 @@
1495261184,1495261439,EU
1495261440,1495263231,PT
1495263232,1495265279,GB
-1495265280,1495265791,DE
-1495265792,1495267327,US
+1495265280,1495267327,US
1495267328,1495269375,SE
1495269376,1495306239,RO
1495306240,1495306573,GB
@@ -18395,22 +17937,15 @@
1495326720,1495330815,MD
1495330816,1495334911,RO
1495334912,1495335935,MD
-1495335936,1495622143,RO
-1495622144,1495622655,A2
-1495622656,1495875583,RO
+1495335936,1495875583,RO
1495875584,1495891967,MD
-1495891968,1495937023,RO
-1495937024,1495937535,SE
-1495937536,1496078335,RO
+1495891968,1496078335,RO
1496078336,1496079359,MD
1496079360,1496121343,RO
1496121344,1496122367,MD
1496122368,1496178943,RO
1496178944,1496179199,AE
-1496179200,1496197119,RO
-1496197120,1496197631,MD
-1496197632,1496262655,RO
-1496262656,1496262911,AE
+1496179200,1496262911,RO
1496262912,1496263167,US
1496263168,1496295423,RO
1496295424,1496297471,GB
@@ -18435,9 +17970,7 @@
1500078080,1500086271,GB
1500086272,1500094463,RU
1500094464,1500102655,AT
-1500102656,1500108799,NL
-1500108800,1500109311,DE
-1500109312,1500110847,NL
+1500102656,1500110847,NL
1500110848,1500119039,UA
1500119040,1500127231,TR
1500127232,1500135423,FI
@@ -18473,9 +18006,7 @@
1500209152,1500211199,KZ
1500211200,1500213247,IT
1500213248,1500217343,RU
-1500217344,1500217855,CZ
-1500217856,1500218879,DE
-1500218880,1500219391,EE
+1500217344,1500219391,DE
1500219392,1500221439,RU
1500221440,1500223487,SK
1500223488,1500225535,PL
@@ -18525,9 +18056,7 @@
1502642176,1502658559,IR
1502658560,1502674943,AT
1502674944,1502691327,DE
-1502691328,1502703103,GB
-1502703104,1502703615,SE
-1502703616,1502707711,GB
+1502691328,1502707711,GB
1502707712,1502715903,RU
1502715904,1502717951,IT
1502717952,1502719999,GB
@@ -18553,8 +18082,8 @@
1502975456,1502975487,IE
1502975488,1502975743,FR
1502975744,1502975999,DE
-1502976000,1502977535,FR
-1502977536,1502979071,US
+1502976000,1502978047,FR
+1502978048,1502979071,US
1502979072,1502979135,FR
1502979136,1502979199,GB
1502979200,1502979215,FR
@@ -18563,13 +18092,8 @@
1502980352,1502980607,US
1502980608,1502981887,FR
1502981888,1502982143,NL
-1502982144,1502982655,DE
-1502982656,1502984703,FR
-1502984704,1502989055,DE
-1502989056,1502989567,TR
-1502989568,1502996735,DE
-1502996736,1502997247,PL
-1502997248,1502999734,DE
+1502982144,1502986239,FR
+1502986240,1502999734,DE
1502999735,1502999735,SA
1502999736,1502999737,DE
1502999738,1502999738,SA
@@ -18821,9 +18345,7 @@
1505681408,1505689599,RU
1505689600,1505697791,NO
1505697792,1505705983,IE
-1505705984,1505708543,DE
-1505708544,1505709055,AT
-1505709056,1505714175,DE
+1505705984,1505714175,DE
1505714176,1505722367,LV
1505722368,1505738751,PL
1505738752,1505746943,GB
@@ -18845,9 +18367,9 @@
1506342912,1506344959,UA
1506344960,1506377727,LV
1506377728,1506410495,HR
-1506410496,1506441727,DE
-1506441728,1506442239,MU
-1506442240,1506443263,DE
+1506410496,1506422063,DE
+1506422064,1506422079,GB
+1506422080,1506443263,DE
1506443264,1506445087,GB
1506445088,1506445119,DE
1506445120,1506445135,GB
@@ -18897,15 +18419,15 @@
1506463232,1506463487,SE
1506463488,1506463743,GB
1506463744,1506463999,DE
-1506464000,1506465023,GB
+1506464000,1506464895,GB
+1506464896,1506464911,NL
+1506464912,1506465023,GB
1506465024,1506465187,EU
1506465188,1506465188,NL
1506465189,1506465279,EU
1506465280,1506466399,GB
1506466400,1506466431,DE
-1506466432,1506467839,GB
-1506467840,1506468351,IT
-1506468352,1506468863,GB
+1506466432,1506468863,GB
1506468864,1506469119,IT
1506469120,1506469663,GB
1506469664,1506469695,IT
@@ -19038,9 +18560,7 @@
1508802560,1508818943,GB
1508818944,1508830719,RO
1508830720,1508831487,SK
-1508831488,1508831743,RO
-1508831744,1508832255,SK
-1508832256,1508835327,RO
+1508831488,1508835327,RO
1508835328,1508851711,CZ
1508851712,1508868095,PL
1508868096,1508884479,RU
@@ -19065,8 +18585,7 @@
1509486592,1509490687,CZ
1509490688,1509494783,DK
1509494784,1509498879,RU
-1509498880,1509501439,DE
-1509501440,1509502975,CH
+1509498880,1509502975,DE
1509502976,1509507071,RU
1509507072,1509511167,GB
1509511168,1509515263,LT
@@ -19274,8 +18793,7 @@
1518927872,1518944255,RU
1518944256,1518960639,SE
1518960640,1518961663,LT
-1518961664,1518962175,EE
-1518962176,1518962687,LV
+1518961664,1518962687,SE
1518962688,1518964735,NO
1518964736,1518966783,HR
1518966784,1518967807,SE
@@ -19305,9 +18823,9 @@
1519927616,1519927679,NL
1519927680,1519931135,GB
1519931136,1519934463,NL
-1519934464,1519934975,GB
-1519934976,1519935487,NL
-1519935488,1519938559,GB
+1519934464,1519936191,GB
+1519936192,1519936255,DK
+1519936256,1519938559,GB
1519938560,1519939583,NL
1519939584,1519943679,GB
1519943680,1519976447,AT
@@ -19412,9 +18930,7 @@
1533474816,1533476863,FR
1533476864,1533478911,IE
1533478912,1533480959,RS
-1533480960,1533481983,NL
-1533481984,1533482495,GB
-1533482496,1533483007,NL
+1533480960,1533483007,NL
1533483008,1533485055,AM
1533485056,1533485951,GB
1533485952,1533486079,SE
@@ -19444,7 +18960,9 @@
1533540352,1533542399,AT
1533542400,1533607935,HU
1533607936,1533640703,LV
-1533640704,1533669375,RU
+1533640704,1533663231,RU
+1533663232,1533665279,NL
+1533665280,1533669375,RU
1533669376,1533671423,DE
1533671424,1533673471,FI
1533673472,1533677567,DE
@@ -19471,23 +18989,19 @@
1533851648,1533853695,CH
1533853696,1533868287,GB
1533868288,1533868543,TR
-1533868544,1533870079,GB
-1533870080,1533870591,ES
-1533870592,1533874175,GB
+1533868544,1533874175,GB
1533874176,1533878271,DE
1533878272,1533880319,CZ
1533880320,1533882367,GB
1533882368,1533886463,IT
1533886464,1533894655,RU
1533894656,1533896703,ES
-1533896704,1533897983,PT
-1533897984,1533898495,US
-1533898496,1533900799,PT
+1533896704,1533900799,PT
1533900800,1533902847,FR
1533902848,1533911039,RU
1533911040,1533913087,ES
1533913088,1533915135,IT
-1533915136,1533919231,GB
+1533915136,1533919231,NL
1533919232,1533921279,IT
1533921280,1533923327,RU
1533923328,1533925375,TR
@@ -19502,11 +19016,15 @@
1534590976,1534656511,HU
1534656512,1534711807,FR
1534711808,1534712831,BE
-1534712832,1534717663,FR
+1534712832,1534714751,FR
+1534714752,1534714767,DE
+1534714768,1534717663,FR
1534717664,1534717679,GB
1534717680,1534720003,FR
1534720004,1534720007,ES
-1534720008,1534720471,FR
+1534720008,1534720023,FR
+1534720024,1534720027,PL
+1534720028,1534720471,FR
1534720472,1534720479,DE
1534720480,1534721619,FR
1534721620,1534721623,ES
@@ -19536,14 +19054,18 @@
1535311872,1535344639,NO
1535344640,1535377407,SE
1535377408,1535442943,GR
-1535442944,1535508479,FI
+1535442944,1535459327,FI
+1535459328,1535475711,AT
+1535475712,1535508479,IR
1535508480,1535574015,BG
1535574016,1535578111,GB
1535578112,1535582207,LV
1535582208,1535590399,NO
1535590400,1535591423,CH
1535591424,1535591679,NL
-1535591680,1535594495,CH
+1535591680,1535593477,CH
+1535593478,1535593733,HK
+1535593734,1535594495,CH
1535594496,1535598591,LV
1535598592,1535602687,IL
1535602688,1535606783,HU
@@ -19564,8 +19086,7 @@
1535717376,1535721471,CH
1535721472,1535721727,DE
1535721728,1535737855,CH
-1535737856,1535770111,HU
-1535770112,1535770623,SR
+1535737856,1535770623,HU
1535770624,1535803391,CH
1535803392,1535836159,GR
1535836160,1535868927,HU
@@ -19582,8 +19103,8 @@
1536045056,1536045311,IQ
1536045312,1536045567,LB
1536045568,1536047103,DE
-1536047104,1536047615,LB
-1536047616,1536049151,DE
+1536047104,1536047359,LB
+1536047360,1536049151,DE
1536049152,1536051199,IT
1536051200,1536057343,RU
1536057344,1536061439,IE
@@ -19674,8 +19195,8 @@
1537212416,1538260991,FR
1538260992,1538785279,BE
1538785280,1538793471,NL
-1538793472,1538797055,DE
-1538797056,1538801663,NL
+1538793472,1538797567,DE
+1538797568,1538801663,NL
1538801664,1538809855,IR
1538809856,1538818047,GE
1538818048,1538826239,NO
@@ -19686,9 +19207,7 @@
1538859008,1538875391,RU
1538875392,1538883583,RS
1538883584,1538891775,BE
-1538891776,1538894079,DE
-1538894080,1538894591,FR
-1538894592,1538894847,DE
+1538891776,1538894847,DE
1538894848,1538895871,FR
1538895872,1538896895,DE
1538896896,1538897919,FR
@@ -19962,8 +19481,7 @@
1539477504,1539478015,PL
1539478016,1539478527,CH
1539478528,1539479039,RO
-1539479040,1539479551,DK
-1539479552,1539480063,GB
+1539479040,1539480063,GB
1539480064,1539480575,DK
1539480576,1539481087,PL
1539481088,1539481599,GB
@@ -20005,8 +19523,7 @@
1539503104,1539504127,RU
1539504128,1539504639,AT
1539504640,1539505151,UA
-1539505152,1539505663,RU
-1539505664,1539506175,AT
+1539505152,1539506175,RU
1539506176,1539506687,NL
1539506688,1539507199,UA
1539507200,1539508223,RO
@@ -20418,7 +19935,7 @@
1539755264,1539755519,IL
1539755520,1539755775,EE
1539755776,1539756031,MT
-1539756032,1539756543,PL
+1539756288,1539756543,PL
1539756800,1539757055,BE
1539757056,1539757567,RU
1539757568,1539757823,SI
@@ -20503,7 +20020,6 @@
1539778816,1539779071,RO
1539779072,1539779327,GB
1539779328,1539779583,CH
-1539779584,1539779839,PL
1539779840,1539780095,NL
1539780096,1539780351,RU
1539780352,1539780607,AT
@@ -20635,7 +20151,6 @@
1539816960,1539817215,DK
1539817216,1539817471,TR
1539817472,1539817727,DE
-1539817728,1539817983,PL
1539817984,1539818239,UA
1539818240,1539818495,NO
1539818496,1539819007,RU
@@ -20796,8 +20311,8 @@
1539950848,1539951103,RU
1539951104,1539951615,UA
1539951616,1539953663,RU
-1539953664,1539954175,CH
-1539954176,1539954687,KZ
+1539953664,1539954175,AT
+1539954176,1539954687,RU
1539954688,1539956735,RO
1539956736,1539957759,UA
1539957760,1539958783,RU
@@ -20999,7 +20514,6 @@
1540205568,1540206591,DE
1540206592,1540208639,RU
1540208640,1540209663,NO
-1540209664,1540210687,RU
1540210688,1540211455,NL
1540211456,1540211711,CZ
1540212736,1540213759,RU
@@ -21129,7 +20643,7 @@
1540291072,1540291583,BE
1540291584,1540292095,UA
1540292096,1540292607,RU
-1540292608,1540293119,FR
+1540292608,1540293119,IT
1540293120,1540293631,DK
1540293632,1540295167,UA
1540295168,1540295679,PL
@@ -21194,7 +20708,6 @@
1540330496,1540331007,PL
1540331008,1540331519,IT
1540331520,1540332031,GB
-1540332032,1540332543,RU
1540332544,1540333055,PL
1540333056,1540333567,NO
1540333568,1540334079,RO
@@ -21213,7 +20726,7 @@
1540342272,1540342783,UA
1540342784,1540343295,ES
1540343296,1540343807,GB
-1540343808,1540344831,PL
+1540344320,1540344831,PL
1540344832,1540345343,UA
1540345344,1540345855,IL
1540345856,1540346367,FR
@@ -21280,7 +20793,6 @@
1540368896,1540369407,RU
1540369408,1540369663,PL
1540369664,1540369919,DE
-1540369920,1540370175,UA
1540370176,1540370431,DE
1540370432,1540370687,LB
1540370688,1540370943,NL
@@ -21450,7 +20962,6 @@
1540416256,1540416511,CH
1540416512,1540416767,RU
1540416768,1540417023,NL
-1540417024,1540417279,RU
1540417280,1540417535,UA
1540417536,1540417791,RU
1540417792,1540418047,HR
@@ -21551,7 +21062,6 @@
1540446720,1540446975,UA
1540446976,1540447231,RU
1540447232,1540447487,DE
-1540447488,1540447743,PL
1540447744,1540447999,RU
1540448000,1540448255,PL
1540448256,1540448511,UA
@@ -21601,7 +21111,6 @@
1540461056,1540461311,BG
1540461312,1540461823,RU
1540462080,1540462335,SI
-1540462336,1540462591,UA
1540462592,1540463103,PL
1540463104,1540463359,FR
1540463360,1540463615,PL
@@ -21623,7 +21132,6 @@
1540468736,1540468991,UA
1540468992,1540469247,PL
1540469248,1540469503,GB
-1540469504,1540469759,RO
1540469760,1540470015,PL
1540470016,1540470271,SI
1540470272,1540470527,IL
@@ -21812,7 +21320,6 @@
1540624640,1540624895,BG
1540624896,1540625151,GB
1540625152,1540625407,IR
-1540625408,1540625663,RU
1540625664,1540625919,FR
1540625920,1540626175,UA
1540626176,1540626431,RO
@@ -22495,8 +22002,7 @@
1540920576,1540920831,PL
1540920832,1540921087,HU
1540921088,1540921599,RO
-1540921600,1540921855,MT
-1540921856,1540922111,EU
+1540921600,1540922111,MT
1540922112,1540922367,ES
1540922368,1540922879,RO
1540922880,1540923135,DE
@@ -22531,7 +22037,6 @@
1540930304,1540930559,RU
1540930560,1540930815,KW
1540930816,1540931071,KZ
-1540931072,1540931327,EU
1540931328,1540931839,PL
1540931840,1540932095,GB
1540932096,1540932351,PL
@@ -22626,7 +22131,7 @@
1540966912,1540967935,RU
1540967936,1540968447,UA
1540968960,1540969471,RO
-1540969472,1540969983,NL
+1540969472,1540969983,GB
1540969984,1540970495,DE
1540970496,1540971007,IE
1540971008,1540971519,UA
@@ -22670,7 +22175,7 @@
1540986368,1540986623,PL
1540986624,1540986879,FR
1540986880,1540987135,PL
-1540987136,1540987391,UA
+1540987136,1540987391,LV
1540987392,1540987647,FR
1540987648,1540987903,GR
1540987904,1540988159,RU
@@ -23081,7 +22586,6 @@
1541202432,1541202687,ES
1541202688,1541202943,SE
1541202944,1541203199,DE
-1541203200,1541203455,ES
1541203456,1541203711,UA
1541203712,1541203967,GB
1541203968,1541204223,RO
@@ -23543,7 +23047,7 @@
1541420032,1541420543,RU
1541420544,1541421055,NL
1541421056,1541421567,PL
-1541421568,1541422079,CZ
+1541421568,1541422079,GB
1541422080,1541422591,PL
1541422592,1541423103,RU
1541423616,1541424127,AT
@@ -23554,7 +23058,8 @@
1541426176,1541426687,RU
1541426688,1541427199,UA
1541427200,1541428223,RU
-1541428224,1541429247,UA
+1541428224,1541428991,UA
+1541428992,1541429247,RU
1541429248,1541429759,FI
1541429760,1541430271,CZ
1541430272,1541430783,LT
@@ -23724,7 +23229,7 @@
1541572608,1541573119,RU
1541573120,1541573631,UA
1541573632,1541574655,RU
-1541574656,1541575167,DK
+1541574656,1541575167,SE
1541575168,1541575423,PL
1541575424,1541575679,IT
1541575680,1541577727,RU
@@ -23847,9 +23352,7 @@
1541645312,1541645823,IL
1541645824,1541646079,RO
1541646080,1541646335,PL
-1541646336,1541646847,RU
-1541646848,1541647359,NO
-1541647360,1541648383,RU
+1541646336,1541648383,RU
1541648384,1541648639,PL
1541648640,1541648895,DK
1541648896,1541649151,GB
@@ -24113,8 +23616,7 @@
1541795584,1541795839,ES
1541795840,1541796863,UA
1541796864,1541797375,RU
-1541797376,1541797887,NL
-1541797888,1541798143,GB
+1541797376,1541798143,GB
1541798144,1541798911,PL
1541798912,1541799935,CZ
1541799936,1541800447,FR
@@ -24402,8 +23904,7 @@
1541958144,1541958655,RS
1541958656,1541959679,RU
1541959680,1541959935,PL
-1541959936,1541960191,RU
-1541960192,1541960703,NL
+1541959936,1541960703,RU
1541960704,1541961727,UA
1541961728,1541962751,RU
1541962752,1541963007,GB
@@ -24427,7 +23928,8 @@
1541974016,1541975551,RU
1541975552,1541975807,TR
1541975808,1541976319,PL
-1541976320,1541977087,UA
+1541976320,1541976575,UA
+1541976576,1541977087,RU
1541977088,1541977343,IT
1541977344,1541977599,GB
1541977600,1541977855,RO
@@ -24446,7 +23948,8 @@
1541984768,1541985279,RO
1541985280,1541986303,CZ
1541986304,1541986815,RU
-1541986816,1541988351,SK
+1541986816,1541987327,CZ
+1541987328,1541988351,SK
1541988352,1541988607,FR
1541988608,1541988863,RU
1541988864,1541989631,RO
@@ -24478,7 +23981,6 @@
1542000640,1542000895,GB
1542000896,1542001151,UA
1542001152,1542001663,PL
-1542001664,1542001919,SC
1542001920,1542002175,HU
1542002176,1542002687,NL
1542002688,1542002943,RS
@@ -25046,7 +24548,8 @@
1542346240,1542348287,RU
1542348288,1542348799,MD
1542348800,1542349823,RU
-1542349824,1542351359,UA
+1542349824,1542350847,UA
+1542350848,1542351359,CZ
1542351360,1542351615,BG
1542351616,1542351871,PL
1542351872,1542353151,RU
@@ -25145,7 +24648,7 @@
1542401792,1542402047,BG
1542402048,1542403071,UA
1542403072,1542403327,CH
-1542403328,1542403583,UA
+1542403328,1542403583,RU
1542403584,1542404095,IR
1542404096,1542405375,RU
1542405376,1542405631,PL
@@ -25412,7 +24915,7 @@
1542540800,1542541311,GB
1542541312,1542542335,UA
1542542336,1542542847,RU
-1542542848,1542543359,IT
+1542542848,1542543359,GB
1542543360,1542544383,RU
1542544384,1542544639,IR
1542544640,1542544895,UA
@@ -25590,7 +25093,9 @@
1543143424,1543241727,RO
1543241728,1543503871,IT
1543503872,1545601023,GB
-1545601024,1545863167,SE
+1545601024,1545674495,SE
+1545674496,1545674751,FI
+1545674752,1545863167,SE
1545863168,1545895935,RU
1545895936,1545928703,BA
1545928704,1545961471,SI
@@ -25615,11 +25120,8 @@
1546104832,1546108927,IE
1546108928,1546113023,IM
1546113024,1546121215,RU
-1546121216,1546121983,FR
-1546121984,1546123007,ES
-1546123008,1546123263,FR
-1546123264,1546124799,ES
-1546124800,1546125311,FR
+1546121216,1546123263,FR
+1546123264,1546125311,ES
1546125312,1546256383,GB
1546256384,1546264575,RU
1546264576,1546266623,TR
@@ -25655,8 +25157,7 @@
1546328064,1546330111,CZ
1546330112,1546332159,SE
1546332160,1546334207,GB
-1546334208,1546335743,DE
-1546335744,1546336255,GB
+1546334208,1546336255,DE
1546336256,1546338303,CZ
1546338304,1546340351,GB
1546340352,1546342399,DK
@@ -26041,10 +25542,7 @@
1566265344,1566266367,US
1566266368,1566269407,A2
1566269408,1566269439,DE
-1566269440,1566271487,NO
-1566271488,1566271999,FI
-1566272000,1566272511,SE
-1566272512,1566273535,NO
+1566269440,1566273535,NO
1566273536,1566277631,RU
1566277632,1566281727,IT
1566281728,1566285823,CZ
@@ -26059,8 +25557,7 @@
1566314496,1566316543,BE
1566316544,1566318591,NL
1566318592,1566320639,RU
-1566320640,1566321151,DE
-1566321152,1566322687,GB
+1566320640,1566322687,DE
1566322688,1566324735,CZ
1566324736,1566326783,HU
1566326784,1566328831,RU
@@ -26094,7 +25591,15 @@
1566390272,1566392319,LT
1566392320,1566394367,ES
1566394368,1566394527,NO
-1566394528,1566394623,DK
+1566394528,1566394528,DK
+1566394529,1566394529,FR
+1566394530,1566394530,DK
+1566394531,1566394531,DE
+1566394532,1566394532,PL
+1566394533,1566394533,NL
+1566394534,1566394534,SE
+1566394535,1566394535,PT
+1566394536,1566394623,DK
1566394624,1566396415,NO
1566396416,1566398463,GB
1566398464,1566400511,RU
@@ -26192,19 +25697,11 @@
1567424512,1567490047,CY
1567490048,1567555583,IR
1567555584,1567621119,AT
-1567621120,1567696383,RO
-1567696384,1567696895,MD
-1567696896,1567705087,RO
+1567621120,1567705087,RO
1567705088,1567707135,MD
-1567707136,1567712767,RO
-1567712768,1567713279,DE
-1567713280,1567715327,RO
+1567707136,1567715327,RO
1567715328,1567717375,MD
-1567717376,1567742975,RO
-1567742976,1567743487,MD
-1567743488,1567750655,RO
-1567750656,1567751167,SE
-1567751168,1567752191,RO
+1567717376,1567752191,RO
1567752192,1567756287,MD
1567756288,1567763521,RO
1567763522,1567763522,EU
@@ -26215,8 +25712,8 @@
1567776768,1567830015,RO
1567830016,1567831039,MD
1567831040,1567840255,RO
-1567840256,1567842303,DE
-1567842304,1567880191,RO
+1567840256,1567841279,DE
+1567841280,1567880191,RO
1567880192,1567881215,SE
1567881216,1567883263,RO
1567883264,1567948799,MD
@@ -26326,9 +25823,7 @@
1570645248,1570652159,FR
1570652160,1570655999,SE
1570656000,1570656255,GB
-1570656256,1570660863,SE
-1570660864,1570661375,NO
-1570661376,1570668543,SE
+1570656256,1570668543,SE
1570668544,1570701311,RU
1570701312,1570717695,PL
1570717696,1570725887,HR
@@ -26341,38 +25836,36 @@
1570764800,1570766847,DE
1570766848,1571291135,DK
1571291136,1571422207,RO
-1571422208,1571423743,CZ
-1571423744,1571423999,RU
-1571424000,1571424255,CZ
+1571422208,1571422719,CZ
+1571422720,1571423231,RU
+1571423232,1571423487,CZ
+1571423488,1571423999,RU
+1571424000,1571424255,KZ
1571424256,1571424511,KG
-1571424512,1571425279,CZ
+1571424512,1571424767,AM
+1571424768,1571425279,CZ
1571425280,1571425535,RU
-1571425536,1571428351,CZ
-1571428352,1571428863,RU
-1571428864,1571429375,CZ
+1571425536,1571429375,CZ
1571429376,1571435519,UA
1571435520,1571436543,CZ
1571436544,1571438591,RU
1571438592,1571441663,UA
1571441664,1571441791,RU
1571441792,1571441919,DE
-1571441920,1571442175,CZ
-1571442176,1571442687,NL
+1571441920,1571442687,CZ
1571442688,1571443199,UA
1571443200,1571443455,CZ
1571443456,1571443711,UA
1571443712,1571444735,CZ
1571444736,1571446783,NL
-1571446784,1571447807,KZ
-1571447808,1571448831,CZ
+1571446784,1571448831,CZ
1571448832,1571450879,US
1571450880,1571451903,UA
1571451904,1571452927,RU
1571452928,1571453951,CZ
1571453952,1571454975,GB
1571454976,1571455999,RU
-1571456000,1571456511,CY
-1571456512,1571457023,CZ
+1571456000,1571457023,CZ
1571457024,1571458047,UA
1571458048,1571459071,CZ
1571459072,1571463167,UA
@@ -26393,26 +25886,30 @@
1571508224,1571514367,CZ
1571514368,1571520511,BY
1571520512,1571522559,KZ
-1571522560,1571524607,CZ
+1571522560,1571522815,RU
+1571522816,1571524607,CZ
1571524608,1571526655,RU
1571526656,1571528703,CZ
1571528704,1571529727,MD
-1571529728,1571530239,RU
-1571530240,1571531263,CZ
+1571529728,1571531263,CZ
1571531264,1571531775,UA
1571531776,1571532799,RU
1571532800,1571534079,CZ
1571534080,1571534847,RU
1571534848,1571535103,LV
1571535104,1571535871,CZ
-1571535872,1571539967,RU
-1571539968,1571541503,CZ
-1571541504,1571542015,CY
-1571542016,1571544063,CZ
+1571535872,1571538943,RU
+1571538944,1571541248,CZ
+1571541249,1571541504,UA
+1571541505,1571543551,CZ
+1571543552,1571543807,UA
+1571543808,1571544063,CZ
1571544064,1571545087,RU
-1571545088,1571546111,CZ
-1571546112,1571546623,KZ
-1571546624,1571549183,CZ
+1571545088,1571545343,CZ
+1571545344,1571545599,UA
+1571545600,1571545855,CZ
+1571545856,1571546111,RU
+1571546112,1571549183,CZ
1571549184,1571552255,UA
1571552256,1571553279,CZ
1571553280,1571684351,IL
@@ -26452,7 +25949,8 @@
1571748352,1571748607,SG
1571748608,1571748863,GB
1571748864,1571749119,US
-1571749120,1571749887,GB
+1571749120,1571749375,SG
+1571749376,1571749887,GB
1571749888,1571758079,RU
1571758080,1571766271,IL
1571766272,1571786751,PL
@@ -26496,9 +25994,12 @@
1571995648,1572012031,UA
1572012032,1572020223,NO
1572020224,1572028415,SE
-1572028416,1572028927,RU
+1572028416,1572028927,GB
1572028928,1572029183,UA
-1572029184,1572044799,RU
+1572029184,1572030463,GB
+1572030464,1572042751,RU
+1572042752,1572043775,GB
+1572043776,1572044799,RU
1572044800,1572061183,IT
1572061184,1572077567,PL
1572077568,1572093951,RU
@@ -26522,8 +26023,7 @@
1572257792,1572274175,FR
1572274176,1572276223,FI
1572276224,1572277247,US
-1572277248,1572277759,DE
-1572277760,1572290559,SG
+1572277248,1572290559,SG
1572290560,1572306943,RU
1572306944,1572323327,BG
1572323328,1572339711,UA
@@ -26543,7 +26043,8 @@
1572392960,1572393471,NL
1572393472,1572393983,GB
1572393984,1572394495,DE
-1572394496,1572397055,US
+1572394496,1572394751,FR
+1572394752,1572397055,US
1572397056,1572401151,AZ
1572401152,1572405247,GB
1572405248,1572409343,CZ
@@ -26569,9 +26070,7 @@
1572491264,1572495359,IT
1572495360,1572499455,RU
1572499456,1572503551,TR
-1572503552,1572506111,IT
-1572506112,1572506623,GR
-1572506624,1572507647,IT
+1572503552,1572507647,IT
1572507648,1572511743,GB
1572511744,1572515839,DE
1572515840,1572519935,NL
@@ -26633,7 +26132,7 @@
1572635392,1572635647,FR
1572635648,1572635903,ES
1572635904,1572636159,DE
-1572636160,1572636415,SE
+1572636160,1572636415,IT
1572636416,1572636671,NL
1572636672,1572638719,ES
1572638720,1572640767,FR
@@ -26752,8 +26251,9 @@
1578434560,1578500095,HU
1578500096,1578565631,FI
1578565632,1578582015,FR
-1578582016,1578584575,IT
-1578584576,1578586111,PT
+1578582016,1578584063,IT
+1578584064,1578585087,FR
+1578585088,1578586111,PT
1578586112,1578588159,ES
1578588160,1578590207,PL
1578590208,1578592175,FR
@@ -26761,13 +26261,13 @@
1578592184,1578592191,PT
1578592192,1578592199,BE
1578592200,1578592207,CH
-1578592208,1578593471,FR
+1578592208,1578593023,FR
+1578593024,1578593279,DE
+1578593280,1578593471,FR
1578593472,1578593479,GB
1578593480,1578595419,FR
1578595420,1578595423,GB
-1578595424,1578596351,FR
-1578596352,1578596863,GB
-1578596864,1578602495,FR
+1578595424,1578602495,FR
1578602496,1578604543,NL
1578604544,1578606591,GB
1578606592,1578607725,DE
@@ -26821,9 +26321,7 @@
1581826048,1581842431,GB
1581842432,1581858815,BG
1581858816,1581875199,IT
-1581875200,1581890559,TR
-1581890560,1581891071,GB
-1581891072,1581891583,TR
+1581875200,1581891583,TR
1581891584,1581907967,RU
1581907968,1581924351,IT
1581924352,1581940735,UA
@@ -26904,13 +26402,9 @@
1583780768,1583780775,IT
1583780776,1583780943,GB
1583780944,1583780951,IT
-1583780952,1583781039,GB
-1583781040,1583781047,IT
-1583781048,1583781127,GB
-1583781128,1583781135,IT
-1583781136,1583781223,GB
-1583781224,1583781231,IT
-1583781232,1583781279,GB
+1583780952,1583781031,GB
+1583781032,1583781047,IT
+1583781048,1583781279,GB
1583781280,1583781287,IT
1583781288,1583781359,GB
1583781360,1583781367,IT
@@ -26926,7 +26420,9 @@
1583783480,1583783487,IT
1583783488,1583783535,GB
1583783536,1583783543,IT
-1583783544,1583783935,GB
+1583783544,1583783687,GB
+1583783688,1583783695,IT
+1583783696,1583783935,GB
1583783936,1583788031,EU
1583788032,1583792127,TM
1583792128,1583796223,IE
@@ -26965,7 +26461,7 @@
1585199104,1585201151,NL
1585201152,1585205247,IT
1585205248,1585207295,FR
-1585207296,1585211391,NL
+1585207296,1585209343,NL
1585211392,1585213439,CZ
1585213440,1585214463,GB
1585214464,1585217535,NL
@@ -26987,17 +26483,14 @@
1585242112,1585244159,RU
1585244160,1585246207,FR
1585246208,1585248255,RU
-1585248256,1585249279,CZ
-1585249280,1585249791,DE
-1585249792,1585250303,CZ
+1585248256,1585250303,CZ
1585250304,1585254399,RU
1585254400,1585256447,GB
1585256448,1585258495,DE
1585258496,1585260543,GB
1585260544,1585264639,RU
1585264640,1585265663,MT
-1585265664,1585266175,IM
-1585266176,1585266687,MT
+1585265664,1585266687,IM
1585266688,1585270783,DE
1585270784,1585272831,IT
1585272832,1585274879,RU
@@ -27219,17 +26712,14 @@
1588068352,1588592639,GB
1588592640,1588621311,RO
1588621312,1588625407,MD
-1588625408,1588689407,RO
-1588689408,1588689919,DE
-1588689920,1588723711,RO
+1588625408,1588723711,RO
1588723712,1588854783,UA
1588854784,1588985855,RU
1588985856,1589182463,IR
1589182464,1589198847,OM
1589198848,1589200895,FR
1589200896,1589202943,IT
-1589202944,1589203455,SE
-1589203456,1589204991,NL
+1589202944,1589204991,NL
1589204992,1589207039,DE
1589207040,1589215231,IT
1589215232,1589247999,GB
@@ -27308,8 +26798,8 @@
1590151168,1590153215,TR
1590153216,1590157311,RU
1590157312,1590157823,GB
-1590157824,1590158335,IE
-1590158336,1590161407,GB
+1590157824,1590158079,IE
+1590158080,1590161407,GB
1590161408,1590163455,DE
1590163456,1590165503,NL
1590165504,1590176643,AE
@@ -27338,17 +26828,16 @@
1592053760,1592057855,NL
1592057856,1592061951,RS
1592061952,1592066047,RU
-1592066048,1592067583,US
-1592067584,1592068095,CY
-1592068096,1592068607,US
-1592068608,1592070143,CY
+1592066048,1592066559,CY
+1592066560,1592067583,US
+1592067584,1592070143,CY
1592070144,1592074239,RU
1592074240,1592078335,SK
1592078336,1592082431,NL
1592082432,1592086527,GB
1592086528,1592087551,CZ
-1592087552,1592088063,PL
-1592088064,1592090623,CZ
+1592087552,1592087807,PL
+1592087808,1592090623,CZ
1592090624,1592094719,RU
1592094720,1592098815,RS
1592098816,1592102911,GB
@@ -27411,9 +26900,7 @@
1592393728,1592459263,SE
1592459264,1592524799,TR
1592524800,1592557567,GB
-1592557568,1592576511,BG
-1592576512,1592577023,FR
-1592577024,1592590335,BG
+1592557568,1592590335,BG
1592590336,1592623103,FI
1592623104,1592655871,RU
1592655872,1592786943,FR
@@ -27442,9 +26929,7 @@
1593147392,1593163775,RU
1593163776,1593180159,AT
1593180160,1593196543,NO
-1593196544,1593210879,SE
-1593210880,1593211391,NO
-1593211392,1593212927,SE
+1593196544,1593212927,SE
1593212928,1593229311,PL
1593229312,1593245695,EE
1593245696,1593247743,NL
@@ -27523,7 +27008,14 @@
1596946432,1596947455,RU
1596947456,1596948479,UA
1596948480,1596950527,BY
-1596950528,1596981247,CZ
+1596950528,1596950783,UA
+1596950784,1596951551,CZ
+1596951552,1596952063,NL
+1596952064,1596952575,UA
+1596952576,1596952831,RU
+1596952832,1596953599,CZ
+1596953600,1596954623,UA
+1596954624,1596981247,CZ
1596981248,1597243391,PL
1597243392,1597505535,RU
1597505536,1597767679,KZ
@@ -27552,8 +27044,8 @@
1599127552,1599143935,CZ
1599143936,1599160319,UA
1599160320,1599176703,IR
-1599176704,1599188991,FR
-1599188992,1599189503,DE
+1599176704,1599189247,FR
+1599189248,1599189503,DE
1599189504,1599190015,FR
1599190016,1599190271,EU
1599190272,1599193087,FR
@@ -27642,9 +27134,7 @@
1602291712,1602293759,SA
1602293760,1602295807,GB
1602295808,1602297855,NL
-1602297856,1602298879,IL
-1602298880,1602299391,MT
-1602299392,1602299903,GB
+1602297856,1602299903,IL
1602299904,1602301951,GR
1602301952,1602303999,DE
1602304000,1602306047,RU
@@ -27711,10 +27201,7 @@
1602441216,1602443263,GB
1602443264,1602445311,RU
1602445312,1602447359,DE
-1602447360,1602447871,GB
-1602447872,1602448383,DE
-1602448384,1602448895,NL
-1602448896,1602449407,GB
+1602447360,1602449407,GB
1602449408,1602451455,LV
1602451456,1602453503,DE
1602453504,1602455551,SK
@@ -27804,12 +27291,32 @@
1603067928,1603071999,GB
1603072000,1603076095,CZ
1603076096,1603080191,RU
-1603080192,1603080447,GB
-1603080448,1603080703,FR
-1603080704,1603083567,GB
-1603083568,1603083823,LU
-1603083824,1603084287,GB
-1603084288,1603088383,IT
+1603080192,1603080703,GB
+1603080704,1603080831,US
+1603080832,1603080959,SE
+1603080960,1603081087,DE
+1603081088,1603081247,GB
+1603081248,1603081255,NO
+1603081256,1603081263,FI
+1603081264,1603081279,GB
+1603081280,1603081295,US
+1603081296,1603081407,GB
+1603081408,1603081471,ES
+1603081472,1603082239,GB
+1603082240,1603082495,DE
+1603082496,1603082751,GT
+1603082752,1603083007,ES
+1603083008,1603083263,UA
+1603083264,1603083535,DE
+1603083536,1603083551,GB
+1603083552,1603083567,NL
+1603083568,1603083583,LU
+1603083584,1603083615,DE
+1603083616,1603083647,LU
+1603083648,1603083775,DE
+1603083776,1603083823,LU
+1603083824,1603084031,GB
+1603084032,1603088383,IT
1603088384,1603092479,LB
1603092480,1603100671,NO
1603100672,1603108863,FR
@@ -27820,9 +27327,7 @@
1603133440,1603137535,RU
1603137536,1603141631,KW
1603141632,1603145727,ES
-1603145728,1603146239,IL
-1603146240,1603146751,US
-1603146752,1603149823,IL
+1603145728,1603149823,IL
1603149824,1603153919,RU
1603153920,1603158015,NL
1603158016,1603162111,DE
@@ -27909,10 +27414,7 @@
1604919296,1604927487,NO
1604927488,1604935679,IT
1604935680,1604952063,RU
-1604952064,1604958719,DE
-1604958720,1604959231,RU
-1604959232,1604959743,DE
-1604959744,1604960255,RU
+1604952064,1604960255,DE
1604960256,1604968447,BG
1604968448,1604976639,ES
1604976640,1604993023,FR
@@ -27932,17 +27434,19 @@
1605108256,1605108263,IT
1605108264,1605108407,GB
1605108408,1605108415,IT
-1605108416,1605108511,GB
-1605108512,1605108519,IT
-1605108520,1605108567,GB
+1605108416,1605108567,GB
1605108568,1605108575,IT
1605108576,1605108623,GB
1605108624,1605108631,IT
1605108632,1605110263,GB
1605110264,1605110271,IT
-1605110272,1605111111,GB
+1605110272,1605110279,GB
+1605110280,1605110287,IT
+1605110288,1605111111,GB
1605111112,1605111119,IT
-1605111120,1605111847,GB
+1605111120,1605111639,GB
+1605111640,1605111647,IT
+1605111648,1605111847,GB
1605111848,1605111855,IT
1605111856,1605111919,GB
1605111920,1605111927,IT
@@ -27960,7 +27464,9 @@
1605113224,1605113231,IT
1605113232,1605113383,GB
1605113384,1605113391,IT
-1605113392,1605114199,GB
+1605113392,1605113503,GB
+1605113504,1605113511,IT
+1605113512,1605114199,GB
1605114200,1605114207,IT
1605114208,1605114263,GB
1605114264,1605114271,IT
@@ -27972,9 +27478,7 @@
1605115008,1605115015,IT
1605115016,1605115231,GB
1605115232,1605115239,IT
-1605115240,1605115807,GB
-1605115808,1605115815,IT
-1605115816,1605115903,GB
+1605115240,1605115903,GB
1605115904,1605124095,RU
1605124096,1605125119,GB
1605125120,1605125267,DE
@@ -27984,18 +27488,11 @@
1605125905,1605125920,DE
1605125921,1605126911,GB
1605126912,1605127167,EU
-1605127168,1605127679,US
-1605127680,1605128191,GB
-1605128192,1605128703,US
-1605128704,1605129215,GB
-1605129216,1605129727,US
-1605129728,1605130244,GB
+1605127168,1605130244,GB
1605130245,1605130245,EU
1605130246,1605130247,GB
1605130248,1605130248,EU
-1605130249,1605131263,GB
-1605131264,1605131775,US
-1605131776,1605132287,GB
+1605130249,1605132287,GB
1605132288,1605148671,RU
1605148672,1605156863,PT
1605156864,1605165055,JO
@@ -28039,7 +27536,13 @@
1605599232,1605631999,GR
1605632000,1605664767,RS
1605664768,1605697535,MK
-1605697536,1605795839,RU
+1605697536,1605734399,RU
+1605734400,1605736447,GB
+1605736448,1605742591,RU
+1605742592,1605744639,GB
+1605744640,1605756927,RU
+1605756928,1605763071,GB
+1605763072,1605795839,RU
1605795840,1605828607,BE
1605828608,1605861375,RU
1605861376,1605894143,TR
@@ -28071,21 +27574,25 @@
1607610368,1607612415,IE
1607612416,1607614463,EU
1607614464,1607615487,FR
-1607615488,1607616511,GB
-1607616512,1607618559,EU
+1607615488,1607617535,GB
+1607617536,1607618559,EU
1607618560,1607620607,ES
1607620608,1607621375,IT
-1607621376,1607622655,EU
-1607622656,1607625983,IT
+1607621376,1607621631,EU
+1607621632,1607622655,IT
+1607622656,1607624703,ES
+1607624704,1607625983,IT
1607625984,1607626239,EU
1607626240,1607626751,IT
-1607626752,1607628799,EU
+1607626752,1607627519,EU
+1607627520,1607628543,IT
+1607628544,1607628799,EU
1607628800,1607630847,FR
1607630848,1607634431,EU
1607634432,1607636479,IT
-1607636480,1607651839,EU
-1607651840,1607653375,FR
-1607653376,1607655423,EU
+1607636480,1607647231,EU
+1607647232,1607651327,DE
+1607651328,1607655423,FR
1607655424,1607659519,IT
1607659520,1607660031,GB
1607660032,1607663615,IT
@@ -28095,13 +27602,19 @@
1607729152,1607761919,EG
1607761920,1607766015,SY
1607766016,1607794687,EG
-1607794688,1607860223,RU
+1607794688,1607802879,RU
+1607802880,1607820287,GB
+1607820288,1607821055,RU
+1607821056,1607823359,GB
+1607823360,1607824895,RU
+1607824896,1607825919,GB
+1607825920,1607826687,RU
+1607826688,1607827455,GB
+1607827456,1607860223,RU
1607860224,1607892991,ES
1607892992,1607893055,GB
1607893056,1607893119,DE
-1607893120,1607893247,ES
-1607893248,1607893311,AT
-1607893312,1607925759,ES
+1607893120,1607925759,ES
1607925760,1607926783,RU
1607926784,1607927807,UA
1607927808,1607929855,RU
@@ -28166,10 +27679,8 @@
1611227136,1611235327,CA
1611235328,1611923455,US
1611923456,1612185599,CA
-1612185600,1612611329,US
-1612611330,1612611330,CA
-1612611331,1612611583,US
-1612611584,1612636159,CA
+1612185600,1612611327,US
+1612611328,1612636159,CA
1612636160,1613471743,US
1613471744,1613479935,JM
1613479936,1613488127,US
@@ -28199,9 +27710,7 @@
1614786560,1618837503,US
1618837504,1618841599,CA
1618841600,1618849791,US
-1618849792,1618852863,CA
-1618852864,1618853375,US
-1618853376,1618862079,CA
+1618849792,1618862079,CA
1618862080,1618866175,US
1618866176,1618870271,CA
1618870272,1618984959,US
@@ -28210,7 +27719,9 @@
1632305152,1632321535,CA
1632321536,1632354303,US
1632354304,1632362495,CA
-1632362496,1632587007,US
+1632362496,1632583679,US
+1632583680,1632584191,US
+1632584192,1632587007,US
1632587008,1632587263,US
1632587264,1634414591,US
1634414592,1634418687,CA
@@ -28249,7 +27760,10 @@
1654546432,1654550527,VG
1654550528,1654554623,US
1654554624,1654558719,CA
-1654558720,1654648831,US
+1654558720,1654597375,US
+1654597376,1654597631,US
+1654597632,1654648575,US
+1654648576,1654648831,US
1654648832,1654652927,CA
1654652928,1673527295,US
1673527296,1673560063,CA
@@ -28257,9 +27771,7 @@
1673986048,1674051583,CA
1674051584,1674575871,US
1674575872,1677721599,CA
-1677721600,1680534015,US
-1680534016,1680534527,CN
-1680534528,1680535551,US
+1677721600,1680535551,US
1680535552,1680539647,CA
1680539648,1680564223,US
1680564224,1680572415,CA
@@ -28507,7 +28019,6 @@
1728316416,1728317439,MY
1728317440,1728319487,JP
1728319488,1728320511,AU
-1728320512,1728321535,PH
1728321536,1728322559,JP
1728322560,1728323583,MY
1728323584,1728324607,JP
@@ -28771,7 +28282,6 @@
1728558080,1728559103,IN
1728559104,1728560127,ID
1728560128,1728560639,AU
-1728560640,1728561151,HK
1728561152,1728562175,AU
1728562176,1728562431,VN
1728562432,1728562687,VU
@@ -28807,7 +28317,7 @@
1728593152,1728593407,AU
1728593408,1728593663,IN
1728593664,1728593919,ID
-1728593920,1728595967,JP
+1728593920,1728594943,JP
1728595968,1728596479,NZ
1728596480,1728598015,ID
1728598016,1728599039,NZ
@@ -28819,7 +28329,6 @@
1728606208,1728607231,PK
1728607232,1728608255,IN
1728608256,1728608511,SG
-1728608512,1728608767,IN
1728608768,1728609023,ID
1728609024,1728610303,IN
1728610304,1728611327,TH
@@ -29088,7 +28597,6 @@
1728861184,1728861439,ID
1728861440,1728862207,AU
1728862208,1728863231,PH
-1728863232,1728864255,HK
1728864256,1728865279,AF
1728865280,1728866303,AU
1728866304,1728867327,VN
@@ -29143,7 +28651,7 @@
1728905472,1728905727,PK
1728905728,1728907263,IN
1728907264,1728908287,NZ
-1728908288,1728912383,JP
+1728909312,1728912383,JP
1728912384,1728913407,TH
1728913408,1728914431,PH
1728914432,1728915199,ID
@@ -29228,7 +28736,9 @@
1728988192,1728988199,US
1728988200,1728989183,NZ
1728989184,1728990207,BD
-1728990208,1728991231,SG
+1728990208,1728990463,SG
+1728990464,1728990975,KR
+1728990976,1728991231,SG
1728991232,1728992255,BD
1728992256,1728993279,CN
1728993280,1728994303,PG
@@ -29307,9 +28817,7 @@
1729059840,1729060863,JP
1729060864,1729061887,CN
1729061888,1729062911,SG
-1729062912,1729063167,MY
-1729063168,1729063423,HK
-1729063424,1729063935,MY
+1729062912,1729063935,MY
1729063936,1729064959,JP
1729064960,1729065983,PG
1729065984,1729067007,JP
@@ -29481,7 +28989,12 @@
1729216512,1729216767,ID
1729216768,1729217023,AU
1729217024,1729217535,IN
-1729217536,1729218559,HK
+1729217536,1729217791,JP
+1729217792,1729218047,SG
+1729218048,1729218175,MY
+1729218176,1729218303,SG
+1729218304,1729218431,JP
+1729218432,1729218559,KR
1729218560,1729219583,PK
1729219584,1729220607,CN
1729220608,1729221631,MY
@@ -29985,6 +29498,136 @@
1729754112,1729755135,NZ
1729755136,1729756159,BD
1729756160,1729757183,HK
+1729757184,1729758207,CN
+1729758208,1729759231,ID
+1729759232,1729760255,IN
+1729760256,1729761279,ID
+1729761280,1729762303,NZ
+1729762304,1729763327,TH
+1729763328,1729764351,SG
+1729764352,1729766399,JP
+1729766400,1729767423,PH
+1729767424,1729768447,SG
+1729768448,1729769471,MY
+1729769472,1729772543,IN
+1729772544,1729773567,AU
+1729773568,1729774591,CN
+1729774592,1729775615,AU
+1729775616,1729776127,IN
+1729776128,1729776639,MY
+1729776640,1729777663,IN
+1729777664,1729779711,PK
+1729779712,1729780735,AU
+1729780736,1729781759,HK
+1729781760,1729782783,IN
+1729782784,1729783551,ID
+1729783552,1729783807,NZ
+1729783808,1729785855,IN
+1729785856,1729786879,BD
+1729786880,1729787903,JP
+1729787904,1729789951,HK
+1729789952,1729790975,ID
+1729790976,1729791999,HK
+1729792000,1729793023,BD
+1729793024,1729794047,IN
+1729794048,1729795071,HK
+1729795072,1729796095,MY
+1729796096,1729797119,JP
+1729797120,1729799167,CN
+1729799168,1729800191,JP
+1729800192,1729800703,IN
+1729800704,1729801215,MY
+1729801216,1729802239,AU
+1729802240,1729803263,MY
+1729803264,1729804287,TH
+1729804288,1729805311,PK
+1729805312,1729806335,JP
+1729806336,1729807359,MN
+1729807360,1729808383,MY
+1729808384,1729808895,IN
+1729808896,1729809407,AU
+1729809408,1729810431,IN
+1729810432,1729812479,ID
+1729812480,1729813503,IN
+1729813504,1729814527,HK
+1729814528,1729815551,IN
+1729815552,1729816575,CN
+1729816576,1729817599,IN
+1729817600,1729818623,AU
+1729818624,1729819647,CN
+1729819648,1729820671,BD
+1729820672,1729821695,MY
+1729821696,1729822719,VN
+1729822720,1729822975,HK
+1729822976,1729823231,AU
+1729823232,1729823487,IN
+1729823488,1729823743,ID
+1729823744,1729824767,CN
+1729824768,1729825791,IN
+1729825792,1729826815,CN
+1729826816,1729827839,IN
+1729827840,1729828863,PK
+1729828864,1729829887,CN
+1729829888,1729831935,AU
+1729831936,1729832191,ID
+1729832192,1729832447,NZ
+1729832448,1729832959,AU
+1729832960,1729833983,JP
+1729833984,1729835007,SG
+1729835008,1729836031,IN
+1729836032,1729837055,NZ
+1729837056,1729838079,CN
+1729838080,1729840127,VN
+1729840128,1729841151,JP
+1729841152,1729842175,MY
+1729842176,1729843199,HK
+1729843200,1729844223,JP
+1729844224,1729845247,IN
+1729845248,1729846271,NZ
+1729846272,1729847295,AU
+1729847296,1729848319,CN
+1729848320,1729849343,TH
+1729849344,1729850367,MY
+1729850368,1729851391,HK
+1729851392,1729852415,MY
+1729852416,1729853439,MM
+1729853440,1729853695,IN
+1729853696,1729853951,NZ
+1729853952,1729854463,PH
+1729854464,1729855487,HK
+1729855488,1729856511,KR
+1729856512,1729857535,AU
+1729857536,1729858559,JP
+1729858560,1729859583,IN
+1729859584,1729860607,HK
+1729860608,1729861631,KR
+1729861632,1729862655,AU
+1729862656,1729863679,JP
+1729863680,1729864703,AU
+1729864704,1729866751,IN
+1729866752,1729867775,AU
+1729867776,1729868799,CN
+1729868800,1729869823,HK
+1729869824,1729870847,JP
+1729870848,1729871871,AU
+1729871872,1729872895,JP
+1729872896,1729873919,AU
+1729873920,1729874943,TH
+1729874944,1729875455,MY
+1729875456,1729875967,ID
+1729875968,1729876991,CN
+1729876992,1729878015,JP
+1729878016,1729879039,NZ
+1729879040,1729880063,JP
+1729880064,1729881087,AU
+1729881088,1729882111,SG
+1729882112,1729883135,IN
+1729883136,1729884159,VN
+1729884160,1729885183,CN
+1729885184,1729886207,JP
+1729886208,1729887743,ID
+1729887744,1729887999,VU
+1729888000,1729888255,IN
1729888256,1729889279,KH
1729889280,1729891327,CN
1729891328,1729892351,ID
@@ -30421,7 +30064,6 @@
1744229376,1744230399,IN
1744230400,1744230655,HK
1744230656,1744230911,MY
-1744230912,1744231423,IN
1744231424,1744232447,VN
1744232448,1744233471,IN
1744233472,1744234495,KH
@@ -30579,7 +30221,7 @@
1744386560,1744387071,ID
1744387072,1744388095,NZ
1744388096,1744388607,ID
-1744388608,1744389375,AU
+1744388608,1744390143,AU
1744390144,1744391167,HK
1744391168,1744393215,IN
1744393216,1744394239,MY
@@ -30587,10 +30229,160 @@
1744395264,1744396287,MY
1744396288,1744397311,IN
1744397312,1744398335,VN
-1744398336,1744399359,HK
+1744398336,1744400383,HK
+1744400384,1744402431,JP
+1744402432,1744403455,IN
+1744403456,1744404479,AU
+1744404480,1744405503,CN
+1744405504,1744406527,HK
+1744406528,1744407551,CN
+1744407552,1744408575,AU
+1744408576,1744409599,CN
+1744409600,1744410623,AU
+1744410624,1744411647,PK
+1744411648,1744412671,JP
+1744412672,1744413695,SG
+1744413696,1744417791,CN
+1744417792,1744418303,IN
+1744418304,1744418815,AU
+1744418816,1744419839,JP
+1744419840,1744421887,CN
+1744421888,1744422911,HK
+1744422912,1744423935,JP
+1744423936,1744424959,IN
+1744424960,1744425471,MY
+1744425472,1744425727,ID
+1744425728,1744425983,IN
+1744425984,1744427007,JP
+1744427008,1744428031,PG
+1744428032,1744429567,AU
+1744429568,1744429823,IN
+1744429824,1744430079,ID
+1744430080,1744431103,PK
+1744431104,1744434175,IN
+1744434176,1744435199,CN
+1744435200,1744436223,IN
+1744436224,1744437247,CN
+1744437248,1744439295,JP
+1744439296,1744439807,AU
+1744439808,1744440319,IN
+1744440320,1744441343,HK
+1744441344,1744442367,IN
+1744442368,1744443391,AU
+1744443392,1744444415,VN
+1744444416,1744445439,IN
+1744445440,1744446463,CN
+1744446464,1744447487,JP
+1744447488,1744447743,IN
+1744447744,1744447999,HK
+1744448000,1744448511,BD
+1744448512,1744449535,IN
+1744449536,1744450559,NZ
+1744450560,1744451583,HK
+1744451584,1744452607,SG
+1744452608,1744453119,AU
+1744453120,1744453375,IN
+1744453376,1744453631,AU
+1744453632,1744454655,SG
+1744454656,1744455679,BD
+1744455680,1744456703,JP
+1744456704,1744459775,IN
+1744459776,1744460799,NZ
+1744460800,1744462847,JP
+1744462848,1744463871,NZ
+1744463872,1744464895,CN
+1744464896,1744465919,JP
+1744465920,1744466943,IN
+1744466944,1744467967,NZ
+1744467968,1744468991,JP
+1744468992,1744470015,CN
+1744470016,1744471039,TH
+1744471040,1744472063,NP
+1744472064,1744473087,IN
+1744473088,1744474111,SG
+1744474112,1744481279,IN
+1744481280,1744482303,JP
+1744482304,1744483327,IN
+1744483328,1744484351,CN
+1744484352,1744486399,IN
+1744486400,1744487423,CN
+1744487424,1744487935,TH
+1744487936,1744488191,NZ
+1744488192,1744488447,ID
+1744488448,1744489471,JP
+1744489472,1744490495,NZ
+1744490496,1744491519,IN
+1744491520,1744492543,AU
+1744492544,1744493567,CN
+1744493568,1744494079,AU
+1744494080,1744494591,PK
+1744494592,1744495615,CN
+1744495616,1744497663,NZ
+1744497664,1744498687,CN
+1744498688,1744500735,AU
+1744500736,1744502783,CN
+1744502784,1744503807,MY
+1744503808,1744504831,AU
+1744504832,1744505855,MY
+1744505856,1744506367,AU
+1744506368,1744506623,ID
+1744506624,1744506879,AU
+1744506880,1744510975,IN
+1744510976,1744511999,CN
+1744512000,1744513023,HK
+1744513024,1744513535,ID
+1744513536,1744513791,AU
+1744513792,1744514047,IN
+1744514048,1744514559,ID
+1744514560,1744514815,IN
+1744514816,1744515071,AU
+1744515072,1744516095,IN
+1744516096,1744517119,HK
+1744517120,1744519167,IN
+1744519168,1744520191,AU
+1744520192,1744521215,TH
+1744521216,1744523263,JP
+1744523264,1744524287,IN
+1744524288,1744525311,CN
+1744525312,1744526335,HK
+1744526336,1744527359,IN
+1744527360,1744528383,CN
+1744528384,1744529407,IN
+1744529408,1744530431,KR
+1744530432,1744530943,SG
+1744530944,1744531455,AU
+1744531456,1744532479,HK
+1744532480,1744533503,JP
+1744533504,1744534527,BD
+1744534528,1744536575,CN
+1744536576,1744537087,PW
+1744537088,1744538623,AU
+1744538624,1744539647,HK
+1744539648,1744540671,AU
+1744540672,1744541695,IN
+1744541696,1744542719,ID
+1744542720,1744543743,JP
+1744543744,1744544767,CN
+1744544768,1744545791,HK
+1744545792,1744546047,NZ
+1744546048,1744546559,AU
+1744546816,1744547839,AU
+1744547840,1744548863,AF
+1744548864,1744549887,ID
+1744549888,1744551935,IN
+1744551936,1744552959,JP
+1744552960,1744553471,SG
+1744553472,1744553983,HK
+1744553984,1744555007,MY
+1744555008,1744556031,CN
+1744556032,1744562175,IN
+1744562176,1744563199,BD
+1744563200,1744565247,CN
+1744565248,1744566271,HK
1769996288,1772093439,MA
1772093440,1772617727,KE
1772617728,1773142015,AO
+1773142016,1773273087,ZA
1774190592,1774452735,EG
1774452736,1774714879,NG
1774714880,1775239167,EG
@@ -30605,9 +30397,7 @@
1777049600,1777053695,ZA
1777053696,1777057791,BF
1777057792,1777061887,NG
-1777061888,1777062399,SD
-1777062400,1777062655,SS
-1777062656,1777063935,SD
+1777061888,1777063935,SD
1777063936,1777065983,MZ
1777065984,1777070079,GQ
1777070080,1777074175,BW
@@ -30656,15 +30446,13 @@
1795557376,1795557631,IN
1795557632,1795560447,US
1795560448,1795560959,CA
-1795560960,1795561471,US
-1795561472,1795562239,CA
+1795560960,1795561983,US
+1795561984,1795562239,CA
1795562240,1795562495,US
1795562496,1795563519,CA
1795563520,1795565823,US
1795565824,1795566079,CA
-1795566080,1795568127,US
-1795568128,1795568639,CA
-1795568640,1795569663,US
+1795566080,1795569663,US
1795569664,1795570175,CA
1795570176,1795583999,US
1795584000,1795588095,SG
@@ -30711,7 +30499,13 @@
1822519296,1822523391,CA
1822523392,1822531583,US
1822531584,1822535679,CA
-1822535680,1822572543,US
+1822535680,1822552575,US
+1822552576,1822553087,AT
+1822553088,1822553343,US
+1822553344,1822553599,BR
+1822553600,1822553855,US
+1822553856,1822554111,HK
+1822554112,1822572543,US
1822572544,1822605311,CA
1822605312,1822654463,US
1822654464,1822662143,CA
@@ -30944,7 +30738,14 @@
1833529344,1833533439,GB
1833533440,1833537535,RU
1833537536,1833541631,AT
-1833541632,1833545215,GB
+1833541632,1833541887,GB
+1833541888,1833542143,IN
+1833542144,1833542655,GB
+1833542656,1833542911,IN
+1833542912,1833543167,GB
+1833543168,1833543423,IN
+1833543424,1833544959,GB
+1833544960,1833545215,IN
1833545216,1833545471,NL
1833545472,1833545727,GB
1833545728,1833549823,IT
@@ -30953,8 +30754,7 @@
1833558016,1833562111,RO
1833562112,1833566207,PS
1833566208,1833570303,SE
-1833570304,1833571327,GB
-1833571328,1833571583,NL
+1833570304,1833571583,NL
1833571584,1833573631,GB
1833573632,1833574399,NL
1833574400,1833578495,YE
@@ -31028,9 +30828,7 @@
1835008000,1835532287,RO
1835532288,1835540479,SE
1835540480,1835548671,DE
-1835548672,1835549695,GB
-1835549696,1835550207,ES
-1835550208,1835565055,GB
+1835548672,1835565055,GB
1835565056,1835573247,AL
1835573248,1835581439,UA
1835581440,1835589631,BG
@@ -31083,7 +30881,9 @@
1835917920,1835917935,IT
1835917936,1835918159,GB
1835918160,1835918167,IT
-1835918168,1835918439,GB
+1835918168,1835918351,GB
+1835918352,1835918359,IT
+1835918360,1835918439,GB
1835918440,1835918447,IT
1835918448,1835918519,GB
1835918520,1835918527,IT
@@ -31107,13 +30907,15 @@
1835919752,1835919759,IT
1835919760,1835920023,GB
1835920024,1835920031,IT
-1835920032,1835920479,GB
+1835920032,1835920119,GB
+1835920120,1835920127,IT
+1835920128,1835920479,GB
1835920480,1835920487,IT
-1835920488,1835920631,GB
+1835920488,1835920519,GB
+1835920520,1835920527,IT
+1835920528,1835920631,GB
1835920632,1835920639,IT
-1835920640,1835920775,GB
-1835920776,1835920783,IT
-1835920784,1835920863,GB
+1835920640,1835920863,GB
1835920864,1835920871,IT
1835920872,1835921047,GB
1835921048,1835921055,IT
@@ -31126,8 +30928,8 @@
1835921416,1835921439,GB
1835921440,1835921447,IT
1835921448,1835921807,GB
-1835921808,1835921823,IT
-1835921824,1835921855,GB
+1835921808,1835921815,IT
+1835921816,1835921855,GB
1835921856,1835921863,IT
1835921864,1835922415,GB
1835922416,1835922423,IT
@@ -31137,12 +30939,10 @@
1835922816,1835922831,IT
1835922832,1835923519,GB
1835923520,1835923527,IT
-1835923528,1835923639,GB
-1835923640,1835923647,IT
-1835923648,1835923863,GB
+1835923528,1835923863,GB
1835923864,1835923871,IT
-1835923872,1835924159,GB
-1835924160,1835924167,IT
+1835923872,1835924151,GB
+1835924152,1835924167,IT
1835924168,1835924375,GB
1835924376,1835924383,IT
1835924384,1835925503,GB
@@ -31175,8 +30975,8 @@
1836646400,1836679167,RS
1836679168,1836683263,BG
1836683264,1836685311,RO
-1836685312,1836685823,BG
-1836685824,1836687359,GR
+1836685312,1836686335,BG
+1836686336,1836687359,GR
1836687360,1836711935,BG
1836711936,1836728319,UA
1836728320,1836744703,RS
@@ -31238,9 +31038,7 @@
1839454208,1839456255,RU
1839456256,1839458759,RO
1839458760,1839458760,RO
-1839458761,1839459327,RO
-1839459328,1839459839,DE
-1839459840,1839460351,RO
+1839458761,1839460351,RO
1839460352,1839462399,RU
1839462400,1839464447,FI
1839464448,1839497215,CZ
@@ -31254,11 +31052,9 @@
1839759360,1839792127,RU
1839792128,1839794847,GB
1839794848,1839794879,CH
-1839794880,1839806463,GB
-1839806464,1839811071,US
-1839811072,1839812607,GB
-1839812608,1839814143,US
-1839814144,1839816703,GB
+1839794880,1839809535,GB
+1839809536,1839810047,US
+1839810048,1839816703,GB
1839816704,1839824895,NO
1839824896,1839890431,RU
1839890432,1839923199,GB
@@ -31286,13 +31082,7 @@
1841168384,1841233919,FR
1841233920,1841299455,RU
1841299456,1841430527,DE
-1841430528,1841516543,RU
-1841516544,1841517055,US
-1841517056,1841517567,RU
-1841517568,1841517823,US
-1841517824,1841518079,RU
-1841518080,1841518335,US
-1841518336,1841561599,RU
+1841430528,1841561599,RU
1841561600,1841565695,PL
1841565696,1841569791,RU
1841569792,1841577983,PL
@@ -31369,8 +31159,8 @@
1841954816,1841971199,RU
1841971200,1841979391,CZ
1841979392,1841983487,NL
-1841983488,1841983999,GI
-1841984000,1841985535,IM
+1841983488,1841983743,GI
+1841983744,1841985535,IM
1841985536,1841987583,SI
1841987584,1841995775,DK
1841995776,1842003967,RU
@@ -31560,8 +31350,7 @@
1844062208,1844064255,CZ
1844064256,1844068351,IT
1844068352,1844070399,ES
-1844070400,1844071423,GB
-1844071424,1844072447,LU
+1844070400,1844072447,LU
1844072448,1844076543,ES
1844076544,1844076575,GB
1844076576,1844076607,IE
@@ -31572,8 +31361,7 @@
1844076736,1844076799,GB
1844076800,1844077567,IE
1844077568,1844078591,GB
-1844078592,1844080127,DE
-1844080128,1844080639,PL
+1844078592,1844080639,DE
1844080640,1844082687,GE
1844082688,1844084735,DE
1844084736,1844086783,RU
@@ -31633,12 +31421,10 @@
1844207616,1844211711,RU
1844211712,1844215807,SK
1844215808,1844219903,BE
-1844219904,1844220415,US
-1844220416,1844220927,DE
+1844219904,1844220159,US
+1844220160,1844220927,DE
1844220928,1844222975,A2
-1844222976,1844223103,DE
-1844223104,1844223487,A2
-1844223488,1844223999,DE
+1844222976,1844223999,DE
1844224000,1844228095,GB
1844228096,1844232191,DK
1844232192,1844236287,ES
@@ -31664,11 +31450,7 @@
1844330496,1844334591,GB
1844334592,1844342783,RU
1844342784,1844346879,IT
-1844346880,1844349439,GB
-1844349440,1844349951,US
-1844349952,1844350207,GB
-1844350208,1844350719,CA
-1844350720,1844350975,GB
+1844346880,1844350975,GB
1844350976,1844355071,SY
1844355072,1844359167,KZ
1844359168,1844363263,IR
@@ -32163,7 +31945,9 @@
1897758720,1897779199,KR
1897779200,1897781247,AU
1897781248,1897783295,JP
-1897783296,1897787391,SG
+1897783296,1897784831,SG
+1897784832,1897785343,KR
+1897785344,1897787391,SG
1897787392,1897789439,AU
1897789440,1897790463,KH
1897790464,1897791487,HK
@@ -32232,8 +32016,7 @@
1908756480,1908760575,KR
1908760576,1908761599,NZ
1908761600,1908762623,CN
-1908762624,1908762879,IN
-1908762880,1908763135,HK
+1908762624,1908763135,IN
1908763136,1908763391,AU
1908763392,1908763647,IN
1908763648,1908764671,ID
@@ -32412,7 +32195,7 @@
1931354112,1931362303,AU
1931362304,1931378687,TW
1931378688,1931427839,JP
-1931427840,1931431935,PH
+1931427840,1931428351,PH
1931431936,1931433983,JP
1931433984,1931436031,AU
1931436032,1931444223,KR
@@ -32527,9 +32310,7 @@
1940357120,1940389887,JP
1940389888,1940914175,CN
1940914176,1941045247,JP
-1941045248,1941046783,HK
-1941046784,1941047295,AU
-1941047296,1941049343,HK
+1941045248,1941049343,HK
1941049344,1941051391,AU
1941051392,1941052415,KH
1941052416,1941053439,AU
@@ -32607,8 +32388,7 @@
1950089216,1950351359,CN
1950351360,1950482431,JP
1950482432,1950515199,CN
-1950515200,1950515455,US
-1950515456,1950516479,IN
+1950515200,1950516479,IN
1950516480,1950516735,US
1950516736,1950523391,IN
1950523392,1950527487,AU
@@ -32790,9 +32570,13 @@
1964173728,1964173743,JP
1964173744,1964173776,AP
1964173777,1964173777,JP
-1964173778,1964174495,AP
+1964173778,1964173823,AP
+1964173824,1964174079,HK
+1964174080,1964174335,AU
+1964174336,1964174495,SG
1964174496,1964174511,SN
-1964174512,1964175359,AP
+1964174512,1964174591,SG
+1964174592,1964175359,AP
1964175360,1964179455,GB
1964179456,1964244991,TW
1964244992,1964249087,AU
@@ -32876,9 +32660,7 @@
1969793024,1969795071,CN
1969795072,1969797119,NZ
1969797120,1969798143,SG
-1969798144,1969798655,HK
-1969798656,1969798911,KR
-1969798912,1969799167,HK
+1969798144,1969799167,HK
1969799168,1969807359,ID
1969807360,1969809407,AF
1969809408,1969811455,IN
@@ -32907,8 +32689,7 @@
1970926336,1970926591,US
1970926592,1970926847,SG
1970926848,1970927103,IL
-1970927104,1970927359,SG
-1970927360,1970927615,US
+1970927104,1970927615,SG
1970927616,1970929663,AU
1970929664,1970962431,VN
1970962432,1970995199,CN
@@ -33018,7 +32799,7 @@
1991852032,1991868415,CN
1991868416,1991901183,SG
1991901184,1992097791,CN
-1992097792,1992163327,HK
+1992097792,1992163327,SG
1992163328,1992818687,CN
1992818688,1992949759,SG
1992949760,1993342975,CN
@@ -33083,9 +32864,7 @@
1997723648,1997725695,JP
1997725696,1998061567,CN
1998061568,1998258175,JP
-1998258176,1998274047,SG
-1998274048,1998274303,US
-1998274304,1998274559,SG
+1998258176,1998274559,SG
1998274560,1998454783,CN
1998454784,1998456831,AU
1998456832,1998458879,JP
@@ -33110,7 +32889,9 @@
1998579712,1998581759,SG
1998581760,1998583807,KR
1998583808,1998584063,AU
-1998584064,1998585087,KR
+1998584064,1998584319,KR
+1998584320,1998584575,OM
+1998584576,1998585087,KR
1998585088,1998585343,SG
1998585344,1998585599,JP
1998585600,1998585855,IN
@@ -33281,9 +33062,7 @@
2015219968,2015220223,PH
2015220224,2015220479,IN
2015220480,2015220735,HK
-2015220736,2015221247,IN
-2015221248,2015221503,SG
-2015221504,2015223807,IN
+2015220736,2015223807,IN
2015223808,2015225855,ID
2015225856,2015227903,IN
2015227904,2015231999,AU
@@ -33696,9 +33475,7 @@
2063392768,2063400959,IN
2063400960,2063466495,JP
2063466496,2063482879,TW
-2063482880,2063486463,MN
-2063486464,2063486719,JP
-2063486720,2063499263,MN
+2063482880,2063499263,MN
2063499264,2063532031,KR
2063532032,2063548415,LK
2063548416,2063550463,CN
@@ -34140,7 +33917,9 @@
2147485696,2147487743,DK
2147487744,2147489791,NO
2147489792,2147491839,RU
-2147491840,2147500031,DE
+2147491840,2147498239,DE
+2147498240,2147498495,RO
+2147498496,2147500031,DE
2147500032,2147502079,NL
2147502080,2147504127,DK
2147504128,2147508223,RU
@@ -34183,8 +33962,7 @@
2151794688,2151796735,IT
2151796736,2151798783,NL
2151798784,2151799807,DE
-2151799808,2151800319,NL
-2151800320,2151800831,DE
+2151799808,2151800831,NL
2151800832,2151809023,PT
2151809024,2151940095,IT
2151940096,2152100863,RU
@@ -34217,18 +33995,13 @@
2155825152,2155827199,AE
2155827200,2155831295,PL
2155831296,2155833343,RU
-2155833344,2155833855,SE
-2155833856,2155834367,NL
-2155834368,2155834623,SE
-2155834624,2155834879,LU
-2155834880,2155835391,NL
+2155833344,2155835391,SE
2155835392,2155839487,RO
2155839488,2155843583,FR
2155843584,2155845631,RU
2155845632,2155847679,DE
2155847680,2155849727,ES
2155849728,2155851775,TR
-2155851776,2155853823,KZ
2155853824,2155855871,SE
2155855872,2155872255,RO
2155872256,2156003327,US
@@ -34614,9 +34387,7 @@
2193096704,2193162239,US
2193162240,2193178623,UA
2193178624,2193180671,GB
-2193180672,2193181695,IR
-2193181696,2193182207,DE
-2193182208,2193182719,IR
+2193180672,2193182719,IR
2193182720,2193184767,PT
2193184768,2193186815,ES
2193186816,2193188863,PL
@@ -34811,11 +34582,7 @@
2212761600,2212762623,GB
2212762624,2212766719,FI
2212766720,2212767743,GB
-2212767744,2212805631,FI
-2212805632,2212806143,CN
-2212806144,2212810751,FI
-2212810752,2212811263,US
-2212811264,2212823039,FI
+2212767744,2212823039,FI
2212823040,2212954111,US
2212954112,2213019647,GB
2213019648,2213085183,CA
@@ -34989,9 +34756,7 @@
2254080000,2254082047,FR
2254082048,2254084095,NO
2254084096,2254094335,RU
-2254094336,2254096383,RO
-2254096384,2254096895,GB
-2254096896,2254098431,RO
+2254094336,2254098431,RO
2254098432,2254100479,RU
2254100480,2254102527,CH
2254102528,2254110719,IT
@@ -35035,35 +34800,27 @@
2258305024,2258370559,DE
2258370560,2258436095,US
2258436096,2258567167,FR
-2258567168,2258567679,US
-2258567680,2258567935,HK
-2258567936,2258583551,US
+2258567168,2258583551,US
2258583552,2258591743,GB
-2258591744,2258594303,AU
-2258594304,2258594559,HK
+2258591744,2258594559,AU
2258594560,2258594613,AP
2258594614,2258594614,HK
2258594615,2258594815,AP
-2258594816,2258596095,AU
-2258596096,2258596351,HK
+2258594816,2258596351,AU
2258596352,2258596863,AP
2258596864,2258597119,AU
2258597120,2258597375,PG
2258597376,2258600959,AU
2258600960,2258601087,SG
-2258601088,2258601471,AU
-2258601472,2258601983,JP
-2258601984,2258603007,AU
-2258603008,2258603089,HK
+2258601088,2258603089,AU
2258603090,2258603090,PG
-2258603091,2258603263,HK
-2258603264,2258604799,AU
+2258603091,2258604799,AU
2258604800,2258605055,AP
-2258605056,2258606079,AU
-2258606080,2258606335,HK
-2258606336,2258607871,AU
-2258607872,2258608639,HK
-2258608640,2258609663,AU
+2258605056,2258608127,AU
+2258608128,2258608639,HK
+2258608640,2258609151,AU
+2258609152,2258609407,HK
+2258609408,2258609663,AU
2258609664,2258610175,HK
2258610176,2258610431,IN
2258610432,2258611455,HK
@@ -35134,7 +34891,9 @@
2264905728,2264907775,ES
2264907776,2264924159,DE
2264924160,2264989695,CA
-2264989696,2265711615,US
+2264989696,2265605887,US
+2265605888,2265606143,GB
+2265606144,2265711615,US
2265711616,2265776127,CA
2265776128,2266169343,US
2266169344,2266234879,CA
@@ -35191,7 +34950,10 @@
2293055232,2293080063,EU
2293080064,2293088255,BE
2293088256,2293104639,EU
-2293104640,2293891071,US
+2293104640,2293825535,US
+2293825536,2293834239,IN
+2293834240,2293834495,US
+2293834496,2293891071,IN
2293891072,2293956607,AU
2293956608,2294022143,JP
2294022144,2294677503,US
@@ -35292,6 +35054,8 @@
2309750784,2309816319,AU
2309816320,2309881855,US
2309881856,2309947391,NL
+2309947392,2309980159,US
+2309980160,2310012927,CA
2310012928,2310668287,US
2310668288,2310733823,CA
2310733824,2310864895,US
@@ -35425,8 +35189,7 @@
2328100864,2328231935,US
2328231936,2328297471,GB
2328297472,2328313855,EU
-2328313856,2328314111,BE
-2328314112,2328317951,NL
+2328313856,2328317951,NL
2328317952,2328363007,EU
2328363008,2328494079,DE
2328494080,2328559615,US
@@ -35764,11 +35527,7 @@
2372501504,2372505599,UA
2372505600,2372507647,NL
2372507648,2372509695,IT
-2372509696,2372510207,AE
-2372510208,2372510719,ES
-2372510720,2372510975,A2
-2372510976,2372511231,GR
-2372511232,2372511743,A2
+2372509696,2372511743,A2
2372511744,2372513791,SI
2372513792,2372534271,GB
2372534272,2372665343,US
@@ -35810,7 +35569,9 @@
2374516736,2374524927,AM
2374524928,2374525717,FR
2374525718,2374525718,BE
-2374525719,2374529023,FR
+2374525719,2374528261,FR
+2374528262,2374528262,PL
+2374528263,2374529023,FR
2374529024,2374531071,RU
2374531072,2374533119,NL
2374533120,2374565887,HR
@@ -35936,8 +35697,8 @@
2382430208,2382626815,CA
2382626816,2382653183,US
2382653184,2382653439,CN
-2382653440,2382678527,US
-2382678528,2382684159,CA
+2382653440,2382675967,US
+2382675968,2382684159,CA
2382684160,2382692351,US
2382692352,2383085567,CA
2383085568,2383151103,US
@@ -36266,7 +36027,9 @@
2448621568,2448687103,DE
2448687104,2448752639,AT
2448752640,2448818175,CH
-2448818176,2448883711,GB
+2448818176,2448850943,GB
+2448850944,2448851967,US
+2448851968,2448883711,GB
2448883712,2448949247,FI
2448949248,2449014783,FR
2449014784,2449080319,RU
@@ -36292,7 +36055,9 @@
2449477632,2449479679,AL
2449479680,2449481727,FR
2449481728,2449489919,RO
-2449489920,2449491967,FR
+2449489920,2449490943,FR
+2449490944,2449491199,DE
+2449491200,2449491967,FR
2449491968,2449494015,NL
2449494016,2449496063,UA
2449496064,2449498111,FR
@@ -36339,15 +36104,10 @@
2453805056,2453807103,FI
2453807104,2453815295,GB
2453815296,2453831679,RO
-2453831680,2453832191,IQ
-2453832192,2453832703,IR
-2453832704,2453833727,IQ
+2453831680,2453833727,IQ
2453833728,2453835775,ES
2453835776,2453837823,FR
-2453837824,2453838335,LU
-2453838336,2453838847,EU
-2453838848,2453839359,SE
-2453839360,2453839871,LU
+2453837824,2453839871,EU
2453839872,2453852159,RU
2453852160,2453856255,RO
2453856256,2453858303,DE
@@ -36373,7 +36133,9 @@
2454885504,2454885631,GB
2454885632,2454904999,US
2454905000,2454905007,BR
-2454905008,2454906943,US
+2454905008,2454905919,US
+2454905920,2454905951,AR
+2454905952,2454906943,US
2454906944,2454906951,CL
2454906952,2454913023,US
2454913024,2454978559,CL
@@ -36461,18 +36223,16 @@
2461603764,2461605887,GB
2461605888,2461607935,LB
2461607936,2461609983,FR
-2461609984,2461610111,NL
-2461610112,2461610463,BE
-2461610464,2461611519,NL
+2461609984,2461611519,NL
2461611520,2461611575,BE
2461611576,2461611583,NL
-2461611584,2461612031,BE
+2461611584,2461611775,BE
+2461611776,2461612031,NL
2461612032,2461613567,IL
2461613568,2461613823,PS
2461613824,2461614079,IL
2461614080,2461630463,TR
-2461630464,2461662719,RU
-2461662720,2461663231,UA
+2461630464,2461663231,RU
2461663232,2461794303,US
2461794304,2461859839,GB
2461859840,2461990911,US
@@ -36546,9 +36306,15 @@
2466232320,2466234367,ES
2466234368,2466242559,RU
2466242560,2466250751,GE
-2466250752,2466323475,US
-2466323476,2466323477,IN
-2466323478,2466643967,US
+2466250752,2466318335,US
+2466318336,2466318591,SG
+2466318592,2466323455,US
+2466323456,2466323711,SG
+2466323712,2466326015,US
+2466326016,2466326271,SG
+2466326272,2466336767,US
+2466336768,2466337023,SG
+2466337024,2466643967,US
2466643968,2466709503,KR
2466709504,2466775039,HU
2466775040,2466840575,HK
@@ -36670,11 +36436,47 @@
2479226880,2479357951,US
2479357952,2479423487,AU
2479423488,2479489023,GB
-2479489024,2479584767,US
+2479489024,2479554559,US
+2479554560,2479554815,US
+2479554816,2479557631,US
+2479557632,2479557887,US
+2479557888,2479558143,US
+2479558144,2479558399,US
+2479558400,2479558655,US
+2479558656,2479558911,US
+2479558912,2479559167,US
+2479559168,2479559423,US
+2479559424,2479559679,US
+2479559680,2479559935,US
+2479559936,2479560191,US
+2479560192,2479560447,US
+2479560448,2479560703,US
+2479560704,2479560959,US
+2479560960,2479579135,US
+2479579136,2479579391,US
+2479579392,2479579903,US
+2479579904,2479580159,US
+2479580160,2479580671,US
+2479580672,2479580927,US
+2479580928,2479581439,US
+2479581440,2479581695,US
+2479581696,2479582207,US
+2479582208,2479582463,US
+2479582464,2479584767,US
2479584768,2479585023,US
-2479585024,2479586815,US
+2479585024,2479585279,US
+2479585280,2479585535,US
+2479585536,2479586815,US
2479586816,2479587071,US
-2479587072,2479620095,US
+2479587072,2479603711,US
+2479603712,2479603967,US
+2479603968,2479604223,US
+2479604224,2479604479,US
+2479604480,2479604735,US
+2479604736,2479604991,US
+2479604992,2479605247,US
+2479605248,2479605503,US
+2479605504,2479620095,US
2479620096,2479685631,DE
2479685632,2479947775,US
2479947776,2480013311,AU
@@ -36867,7 +36669,9 @@
2500392960,2500393215,IN
2500393216,2500393983,US
2500393984,2500394239,GB
-2500394240,2500535295,US
+2500394240,2500532749,US
+2500532750,2500532750,GR
+2500532751,2500535295,US
2500535296,2500535551,IE
2500535552,2500537343,US
2500537344,2500537599,GB
@@ -36958,10 +36762,13 @@
2509928448,2509930495,FI
2509930496,2509934591,RU
2509934592,2509936639,DE
-2509936640,2509937919,AT
+2509936640,2509937665,AT
+2509937666,2509937752,RU
+2509937753,2509937753,AT
+2509937754,2509937919,RU
2509937920,2509938175,IT
2509938176,2509938431,US
-2509938432,2509938687,AT
+2509938432,2509938687,DE
2509938688,2509946879,UA
2509946880,2509963263,BE
2509963264,2510028799,GB
@@ -36983,14 +36790,16 @@
2512977920,2513502207,DE
2513502208,2513567743,NO
2513567744,2513600511,GR
-2513600512,2513633279,RO
+2513600512,2513633279,NL
2513633280,2513698815,DE
2513698816,2513764351,DK
2513764352,2514419711,DE
2514419712,2514485247,GB
2514485248,2514681599,DE
2514681600,2514681855,EU
-2514681856,2515599359,DE
+2514681856,2515205119,DE
+2515205120,2515206143,US
+2515206144,2515599359,DE
2515599360,2515664895,GB
2515664896,2516037631,DE
2516037632,2516038143,DK
@@ -37006,11 +36815,13 @@
2516525184,2516525246,NL
2516525247,2516525423,US
2516525424,2516525431,NL
-2516525432,2516525727,US
+2516525432,2516525439,US
+2516525440,2516525447,NL
+2516525448,2516525727,US
2516525728,2516525823,NL
2516525824,2516526079,US
-2516526080,2516526143,NL
-2516526144,2516526335,US
+2516526080,2516526175,NL
+2516526176,2516526335,US
2516526336,2516527103,NL
2516527104,2516529151,GB
2516529152,2516529279,CH
@@ -37158,13 +36969,36 @@
2546039040,2547187711,US
2547187712,2547318783,GB
2547318784,2547515391,US
-2547515392,2547517439,FR
-2547548160,2547580927,RU
+2547531776,2547548159,NL
+2547548160,2547646463,RU
+2547646464,2547679231,NL
2548039680,2548563967,GB
2548563968,2548826111,IR
-2548826112,2548831501,AT
-2548831502,2548831502,FR
-2548831503,2548834303,AT
+2548826112,2548827391,AT
+2548827392,2548827647,RU
+2548827648,2548828671,AT
+2548828672,2548829439,RU
+2548829440,2548829695,AT
+2548829696,2548829951,NL
+2548829952,2548829973,AE
+2548829974,2548829974,DE
+2548829975,2548830035,AE
+2548830036,2548830036,DE
+2548830037,2548830207,AE
+2548830208,2548830463,US
+2548830464,2548830719,DE
+2548830720,2548830975,IT
+2548830976,2548831231,GB
+2548831232,2548831487,HK
+2548831488,2548831743,FR
+2548831744,2548831999,US
+2548832000,2548832255,ES
+2548832256,2548832511,IS
+2548832512,2548832767,RU
+2548832768,2548833279,CH
+2548833280,2548833791,RU
+2548833792,2548834047,RO
+2548834048,2548834303,RU
2548834304,2548842495,GB
2548842496,2548858879,RU
2548858880,2548867071,NL
@@ -37201,11 +37035,11 @@
2549645312,2549678079,RO
2549678080,2549698559,GB
2549698560,2549700607,PL
-2549700608,2549701119,DE
-2549701120,2549701375,EU
+2549700608,2549701375,DE
2549701376,2549701631,SE
2549701632,2549701887,PL
-2549701888,2549702655,EU
+2549701888,2549702143,IT
+2549702144,2549702655,EU
2549702656,2549704703,UA
2549704704,2549706751,CZ
2549706752,2549710847,NO
@@ -37222,7 +37056,7 @@
2549899264,2549901311,PS
2549901312,2549903359,RU
2549903360,2549905407,ES
-2549905408,2549907455,NL
+2549905408,2549907455,JP
2549907456,2549923839,DE
2549923840,2549927935,BG
2549927936,2549929983,HR
@@ -37345,7 +37179,14 @@
2574319616,2574647295,US
2574647296,2574778367,CN
2574778368,2583691263,JP
-2583691264,2584018943,US
+2583691264,2583695359,ZA
+2583695360,2583697407,BW
+2583697408,2583699455,CI
+2583699456,2583707647,GA
+2583707648,2583724031,AO
+2583724032,2583728127,UG
+2583740416,2583756799,NA
+2583756800,2584018943,US
2584018944,2584084479,CA
2584084480,2584215551,US
2584215552,2584281087,GB
@@ -37385,13 +37226,20 @@
2587067648,2587067903,GB
2587067904,2587068415,US
2587068416,2587068479,GB
-2587068480,2587377663,US
+2587068480,2587240389,US
+2587240390,2587240390,FR
+2587240391,2587249417,US
+2587249418,2587249418,FR
+2587249419,2587377663,US
2587377664,2587381759,IT
2587381760,2587443199,US
2587443200,2587447295,CH
-2587447296,2587926527,US
+2587447296,2587492351,US
+2587492352,2587493375,ES
+2587493376,2587926527,US
2587926528,2587930623,BG
2587930624,2587951103,US
+2588934144,2589982719,SC
2600534016,2600665087,US
2600665088,2600730623,CA
2600730624,2600796159,NO
@@ -37443,7 +37291,7 @@
2608728320,2609053695,US
2609053696,2609119231,GB
2609119232,2609184767,FR
-2609184768,2609250303,DE
+2609184768,2609250303,PL
2609250304,2609381375,US
2609381376,2609446911,GB
2609446912,2609512447,DK
@@ -37567,7 +37415,9 @@
2621636608,2621702143,DE
2621702144,2621767679,US
2621767680,2621833215,NZ
-2621833216,2622685183,US
+2621833216,2621936895,US
+2621936896,2621937151,SG
+2621937152,2622685183,US
2622685184,2622750719,NL
2622750720,2623602687,US
2623602688,2623668223,CL
@@ -37711,8 +37561,8 @@
2650275840,2650341375,US
2650341376,2650406911,NO
2650406912,2650423295,US
-2650423296,2650439679,JP
-2650439680,2650603519,US
+2650423296,2650472447,JP
+2650472448,2650603519,US
2650603520,2650669055,CO
2650669056,2650734591,US
2650734592,2650800127,CN
@@ -37861,9 +37711,7 @@
2667513856,2667515903,GB
2667515904,2667517951,CZ
2667517952,2667518975,SK
-2667518976,2667519231,CZ
-2667519232,2667519743,SK
-2667519744,2667522047,CZ
+2667518976,2667522047,CZ
2667522048,2667524095,GB
2667524096,2667526143,RU
2667526144,2667528191,LV
@@ -37876,13 +37724,23 @@
2667537408,2667544575,AT
2667544576,2667560959,RU
2667560960,2667565055,IT
-2667565056,2667565422,AT
+2667565056,2667565311,HK
+2667565312,2667565313,AT
+2667565314,2667565421,RU
+2667565422,2667565422,PT
2667565423,2667565423,ES
2667565424,2667565424,US
-2667565425,2667566335,AT
+2667565425,2667565425,CR
+2667565426,2667565426,KN
+2667565427,2667565427,BR
+2667565428,2667565428,FI
+2667565429,2667565429,CH
+2667565430,2667565430,GB
+2667565431,2667565823,RU
+2667565824,2667566335,AT
2667566336,2667566591,US
2667566592,2667566847,DE
-2667566848,2667567103,AT
+2667566848,2667567103,FR
2667567104,2667569151,SE
2667569152,2667571199,GB
2667571200,2667573247,ES
@@ -38196,11 +38054,9 @@
2688286720,2688352255,DE
2688352256,2688418825,CH
2688418826,2688418826,EU
-2688418827,2688420863,CH
-2688420864,2688421119,SG
+2688418827,2688421119,CH
2688421120,2688421375,AP
-2688421376,2688421887,US
-2688421888,2688548863,CH
+2688421376,2688548863,CH
2688548864,2688614399,AU
2688614400,2688679935,US
2688679936,2688745471,IT
@@ -38214,21 +38070,15 @@
2689269760,2689335295,TR
2689335296,2689400831,US
2689466368,2689531903,IT
-2689531904,2689535999,US
-2689536000,2689536511,GB
-2689536512,2689545727,US
-2689545728,2689546239,GB
-2689546240,2689566207,US
-2689566208,2689566719,GB
-2689566720,2689568255,US
-2689568256,2689568767,GB
-2689568768,2689586687,US
-2689586688,2689587199,GB
-2689587200,2689593343,US
-2689593344,2689593855,GB
-2689593856,2689594367,US
-2689594368,2689594879,GB
-2689594880,2689597439,US
+2689531904,2689536255,US
+2689536256,2689536511,GB
+2689536512,2689566207,US
+2689566208,2689566463,GB
+2689566464,2689586687,US
+2689586688,2689586943,GB
+2689586944,2689593343,US
+2689593344,2689593599,GB
+2689593600,2689597439,US
2689597440,2689662975,IT
2689662976,2689794047,US
2689794048,2689802239,DE
@@ -38435,7 +38285,9 @@
2720399360,2720464895,FR
2720464896,2721382399,US
2721382400,2721447935,CA
-2721447936,2722693119,US
+2721447936,2721579007,US
+2721579008,2721644543,IN
+2721644544,2722693119,US
2722693120,2722758655,CA
2722758656,2723479551,US
2723479552,2723545087,CA
@@ -38504,7 +38356,8 @@
2731786240,2731788287,CA
2731788288,2731790335,US
2731790336,2731792383,CA
-2731792384,2731796479,US
+2731792384,2731795455,US
+2731795456,2731796479,DE
2731796480,2731797503,CA
2731797504,2731800575,US
2731800576,2731801599,CA
@@ -38528,8 +38381,30 @@
2731862016,2731864063,CA
2731864064,2731870207,US
2731870208,2731871231,CA
-2731871232,2731880447,US
-2731933696,2732064767,US
+2731871232,2731894783,US
+2731894784,2731896831,CA
+2731896832,2731902975,US
+2731902976,2731903999,CA
+2731904000,2731908095,US
+2731908096,2731909119,CA
+2731909120,2731911167,US
+2731911168,2731912191,DM
+2731912192,2731921663,US
+2731921664,2731921727,BE
+2731921728,2732086271,US
+2732086272,2732087295,CA
+2732087296,2732105727,US
+2732105728,2732107775,JM
+2732107776,2732109823,US
+2732110848,2732111871,US
+2732111872,2732113919,CA
+2732113920,2732189695,US
+2732189696,2732192767,CA
+2732192768,2732201983,US
+2732201984,2732203007,VG
+2732203008,2732204031,US
+2732204032,2732206079,CA
+2732206080,2732228607,US
2732589056,2733637631,US
2734686208,2734751743,CN
2734751744,2734817279,GB
@@ -38788,7 +38663,10 @@
2769879040,2769944575,ZA
2769944576,2770272255,US
2770272256,2770337791,AU
-2770337792,2772631551,US
+2770337792,2770993151,US
+2770993152,2771124223,IN
+2771124224,2771451903,US
+2772434944,2772631551,US
2772631552,2772697087,AU
2772697088,2772762623,US
2772762624,2772828159,AU
@@ -38834,8 +38712,7 @@
2778071040,2778333183,US
2778333184,2778398719,CA
2778398720,2779054079,US
-2779054080,2779070463,SZ
-2779070464,2779119615,ZA
+2779054080,2779119615,ZA
2779119616,2779906047,US
2779906048,2779971583,CA
2779971584,2780037119,US
@@ -38848,13 +38725,9 @@
2780495872,2780561407,AU
2780561408,2780758015,US
2780758016,2780823551,AU
-2780823552,2780930047,US
-2780930048,2780930559,GB
-2780930560,2780931071,US
+2780823552,2780931071,US
2780931072,2780932351,GB
-2780932352,2780932607,US
-2780932608,2780933119,GB
-2780933120,2780954623,US
+2780932352,2780954623,US
2780954624,2781020159,KR
2781020160,2781478911,US
2781478912,2781544447,HK
@@ -38878,69 +38751,7 @@
2783182848,2783248383,AU
2783248384,2783313919,KR
2783313920,2783379455,US
-2783379456,2783383039,ZA
-2783383040,2783383295,US
-2783383296,2783384575,ZA
-2783384576,2783384831,US
-2783384832,2783386623,ZA
-2783386624,2783386879,US
-2783386880,2783388159,ZA
-2783388160,2783388415,US
-2783388416,2783388927,ZA
-2783388928,2783389183,US
-2783389184,2783390719,ZA
-2783390720,2783390975,US
-2783390976,2783394815,ZA
-2783394816,2783395071,US
-2783395072,2783396351,ZA
-2783396352,2783396863,US
-2783396864,2783399167,ZA
-2783399168,2783399679,US
-2783399680,2783405311,ZA
-2783405312,2783405567,US
-2783405568,2783408127,ZA
-2783408128,2783408383,US
-2783408384,2783408895,ZA
-2783408896,2783409151,US
-2783409152,2783409407,ZA
-2783409408,2783409663,US
-2783409664,2783410431,ZA
-2783410432,2783410687,US
-2783410688,2783411711,ZA
-2783411712,2783411967,US
-2783411968,2783412223,ZA
-2783412224,2783412735,US
-2783412736,2783415551,ZA
-2783415552,2783416063,US
-2783416064,2783417087,ZA
-2783417088,2783417343,US
-2783417344,2783417599,ZA
-2783417600,2783417855,US
-2783417856,2783419647,ZA
-2783419648,2783419903,US
-2783419904,2783420415,ZA
-2783420416,2783420671,US
-2783420672,2783425023,ZA
-2783425024,2783425279,US
-2783425280,2783426815,ZA
-2783426816,2783427071,US
-2783427072,2783428607,ZA
-2783428608,2783428863,US
-2783428864,2783429119,ZA
-2783429120,2783429375,US
-2783429376,2783430399,ZA
-2783430400,2783430655,US
-2783430656,2783431679,ZA
-2783431680,2783431935,US
-2783431936,2783432447,ZA
-2783432448,2783432703,US
-2783432704,2783437055,ZA
-2783437056,2783437311,US
-2783437312,2783440127,ZA
-2783440128,2783440383,US
-2783440384,2783442943,ZA
-2783442944,2783443199,US
-2783443200,2783444991,ZA
+2783379456,2783444991,ZA
2783444992,2783510527,US
2783510528,2783576063,ZA
2783576064,2783969279,US
@@ -39122,7 +38933,9 @@
2818310144,2818375679,AR
2818375680,2818572287,US
2818637824,2818703359,CH
-2818703360,2822848997,US
+2818703360,2822731894,US
+2822731895,2822731895,GB
+2822731896,2822848997,US
2822848998,2822848998,EU
2822848999,2823159807,US
2823159808,2823225343,HK
@@ -39399,8 +39212,8 @@
2870083584,2870089727,FR
2870089728,2870091775,DE
2870091776,2870095871,FR
-2870095872,2870096383,SG
-2870096384,2870149119,FR
+2870095872,2870096127,SG
+2870096128,2870149119,FR
2870149120,2870214655,HU
2870214656,2870280191,DK
2870280192,2870345727,NL
@@ -39482,7 +39295,9 @@
2882469888,2882535423,SG
2882535424,2883583999,CN
2883584000,2885681151,VN
-2885681152,2886729727,US
+2885681152,2886667022,US
+2886667023,2886667278,DE
+2886667279,2886729727,US
2887778304,2889875455,US
2894069760,2894921727,US
2894921728,2895118335,GB
@@ -39541,8 +39356,22 @@
2915250176,2915254271,CA
2915254272,2915497759,US
2915497760,2915497761,US
-2915497762,2915528703,US
-2915528704,2915528711,NL
+2915497762,2915516415,US
+2915516416,2915516671,NL
+2915516672,2915516927,CA
+2915516928,2915517183,US
+2915517184,2915517439,RU
+2915517440,2915518463,DK
+2915518464,2915519487,GB
+2915519488,2915519743,US
+2915519744,2915520511,GB
+2915520512,2915521023,AU
+2915521024,2915521279,JP
+2915521280,2915521535,PL
+2915521536,2915526911,US
+2915526912,2915527167,DE
+2915527168,2915527679,US
+2915527680,2915528711,NL
2915528712,2915528735,US
2915528736,2915528751,NL
2915528752,2915795013,US
@@ -39561,9 +39390,9 @@
2916319232,2916335615,PR
2916335616,2916368383,US
2916368384,2916401151,CA
-2916401152,2916481023,US
-2916481024,2916481279,US
-2916481280,2916515839,US
+2916401152,2916478975,US
+2916478976,2916481535,US
+2916481536,2916515839,US
2916515840,2916519935,CA
2916519936,2916581375,US
2916581376,2916614143,PR
@@ -39588,13 +39417,9 @@
2917572608,2917580799,CA
2917580800,2917621759,US
2917621760,2917629951,CA
-2917629952,2917647871,US
-2917647872,2917648383,CN
-2917648384,2917653503,US
+2917629952,2917653503,US
2917653504,2917654015,GB
-2917654016,2917660671,US
-2917660672,2917661183,GB
-2917661184,2917706239,US
+2917654016,2917706239,US
2917706240,2917707007,CA
2917707008,2918014975,US
2918014976,2918023167,CA
@@ -39604,7 +39429,9 @@
2918051840,2918121471,CA
2918121472,2918154239,US
2918154240,2918170623,CA
-2918170624,2918187775,US
+2918170624,2918186751,US
+2918186752,2918187007,US
+2918187008,2918187775,US
2918187776,2918187839,CA
2918187840,2918232063,US
2918232064,2918236159,CA
@@ -39626,10 +39453,10 @@
2918404096,2918408191,PR
2918408192,2918432767,US
2918432768,2918436863,CA
-2918436864,2918469631,US
-2918469632,2918472703,CA
-2918472704,2918473215,US
-2918473216,2918473727,CA
+2918436864,2918465279,US
+2918465280,2918465535,US
+2918465536,2918469631,US
+2918469632,2918473727,CA
2918473728,2918477823,US
2918477824,2918481919,CA
2918481920,2918502078,US
@@ -39646,10 +39473,7 @@
2918699008,2918703103,CA
2918703104,2918760447,US
2918760448,2918776831,CA
-2918776832,2918828031,US
-2918828032,2918828543,UA
-2918828544,2918829055,ES
-2918829056,2918830079,US
+2918776832,2918830079,US
2918830080,2918834175,CA
2918834176,2918842367,US
2918842368,2918875135,CA
@@ -39663,8 +39487,8 @@
2919055360,2919057407,CN
2919057408,2919059455,IN
2919059456,2919063551,CN
-2919063552,2919064063,MX
-2919064064,2919067647,CN
+2919063552,2919064575,US
+2919064576,2919067647,CN
2919067648,2919070983,US
2919070984,2919070991,GB
2919070992,2919159873,US
@@ -39712,7 +39536,9 @@
2926575616,2927099903,CA
2927099904,2927939071,US
2927939072,2927939327,US
-2927939328,2928177151,US
+2927939328,2928175551,US
+2928175552,2928175559,VN
+2928175560,2928177151,US
2928177152,2928181247,CA
2928181248,2928226303,US
2928226304,2928230399,CA
@@ -39722,9 +39548,7 @@
2928252612,2928252612,US
2928252613,2928252987,US
2928252988,2928252988,US
-2928252989,2928261375,US
-2928261376,2928261887,CA
-2928261888,2928263167,US
+2928252989,2928263167,US
2928263168,2928279551,CA
2928279552,2928312319,US
2928312320,2928316415,CA
@@ -39913,13 +39737,19 @@
2954647552,2954657791,ES
2954657792,2954756095,JO
2954756096,2954821631,TR
-2954821632,2954824455,FR
+2954821632,2954823395,FR
+2954823396,2954823399,GB
+2954823400,2954824455,FR
2954824456,2954824463,NL
2954824464,2954827799,FR
2954827800,2954827807,DE
2954827808,2954828799,FR
2954828800,2954828815,NL
-2954828816,2954829843,FR
+2954828816,2954829751,FR
+2954829752,2954829752,ES
+2954829753,2954829759,FR
+2954829760,2954829823,ES
+2954829824,2954829843,FR
2954829844,2954829847,DE
2954829848,2954832343,FR
2954832344,2954832347,CH
@@ -39937,9 +39767,7 @@
2954838600,2954838607,GB
2954838608,2954839471,FR
2954839472,2954839479,BE
-2954839480,2954839551,FR
-2954839552,2954840063,DE
-2954840064,2954840255,FR
+2954839480,2954840255,FR
2954840256,2954840447,GB
2954840448,2954844147,FR
2954844148,2954844151,DE
@@ -39961,8 +39789,8 @@
2954899456,2954901503,ES
2954901504,2954903551,IT
2954903552,2954911743,JP
-2954911744,2954919423,NL
-2954919424,2954919935,IE
+2954911744,2954918911,NL
+2954918912,2954919935,IE
2954919936,2954928127,RU
2954928128,2954932223,PL
2954932224,2954936319,RU
@@ -40018,11 +39846,9 @@
2956504576,2956504831,NL
2956504832,2956505087,RU
2956505088,2956506111,NL
-2956506112,2956506623,GB
-2956506624,2956507135,RU
+2956506112,2956507135,RU
2956507136,2956508159,NL
-2956508160,2956508671,RU
-2956508672,2956509183,NL
+2956508160,2956509183,RU
2956509184,2956517375,GB
2956517376,2956521471,NL
2956521472,2956525567,SE
@@ -40030,7 +39856,6 @@
2956533760,2956535807,FR
2956535808,2956537855,LV
2956537856,2956541951,UA
-2956541952,2956543999,FR
2956544000,2956546047,RU
2956546048,2956548095,FR
2956548096,2956550143,ME
@@ -40184,7 +40009,8 @@
2959151104,2959155199,PL
2959155200,2959159295,RU
2959159296,2959161343,PL
-2959161344,2959167487,UA
+2959161344,2959163391,UA
+2959163392,2959167487,EU
2959167488,2959171583,PL
2959171584,2959175679,RU
2959175680,2959179775,UA
@@ -40192,7 +40018,7 @@
2959181824,2959183871,PL
2959183872,2959185919,RO
2959185920,2959186943,GB
-2959186944,2959187455,NL
+2959186944,2959187455,CY
2959187456,2959187711,AT
2959187712,2959187967,FR
2959187968,2959204351,RU
@@ -40506,7 +40332,7 @@
2960863744,2960863999,GB
2960864000,2960864255,DE
2960864256,2960864767,GB
-2960864768,2960865279,AT
+2960864768,2960865279,DE
2960865280,2960865535,RU
2960865536,2960865791,HR
2960865792,2960866303,GB
@@ -40717,14 +40543,12 @@
2987569152,2987573247,FR
2987573248,2987577343,TR
2987577344,2987585535,RU
-2987585536,2987589119,DE
-2987589120,2987589631,US
+2987585536,2987589631,DE
2987589632,2987593727,FR
2987593728,2987597823,LT
2987597824,2987601919,ES
2987601920,2987606015,IS
-2987606016,2987606527,US
-2987606528,2987610111,DE
+2987606016,2987610111,DE
2987610112,2987614207,RU
2987614208,2987618303,PL
2987618304,2987622399,NL
@@ -40858,7 +40682,9 @@
2987913216,2987915263,DK
2987915264,2987917311,IT
2987917312,2988179455,DE
-2988179456,2988441599,SE
+2988179456,2988411647,SE
+2988411648,2988411775,DE
+2988411776,2988441599,SE
2988441600,2988444208,FR
2988444209,2988444209,FI
2988444210,2988444671,FR
@@ -40873,13 +40699,13 @@
2988459128,2988459135,PL
2988459136,2988459679,FR
2988459680,2988459683,ES
-2988459684,2988459863,FR
+2988459684,2988459687,FR
+2988459688,2988459691,PL
+2988459692,2988459863,FR
2988459864,2988459867,ES
2988459868,2988460575,FR
2988460576,2988460591,PT
-2988460592,2988461583,FR
-2988461584,2988461587,PL
-2988461588,2988461703,FR
+2988460592,2988461703,FR
2988461704,2988461707,NL
2988461708,2988462603,FR
2988462604,2988462607,ES
@@ -40904,9 +40730,13 @@
2988482576,2988482579,CZ
2988482580,2988484831,FR
2988484832,2988484847,GB
-2988484848,2988487071,FR
+2988484848,2988485683,FR
+2988485684,2988485687,PL
+2988485688,2988487071,FR
2988487072,2988487075,ES
-2988487076,2988492799,FR
+2988487076,2988490686,FR
+2988490687,2988490687,BE
+2988490688,2988492799,FR
2988492800,2988494847,PL
2988494848,2988499729,FR
2988499730,2988499730,GB
@@ -40916,7 +40746,9 @@
2988500416,2988500447,CZ
2988500448,2988502051,FR
2988502052,2988502055,PL
-2988502056,2988502881,FR
+2988502056,2988502655,FR
+2988502656,2988502719,DE
+2988502720,2988502881,FR
2988502882,2988502882,IT
2988502883,2988504371,FR
2988504372,2988504375,PL
@@ -40932,9 +40764,7 @@
2988519424,2988521471,PL
2988521472,2988524271,FR
2988524272,2988524287,DE
-2988524288,2988525055,FR
-2988525056,2988525567,PL
-2988525568,2988525887,FR
+2988524288,2988525887,FR
2988525888,2988525951,GB
2988525952,2988526415,FR
2988526416,2988526423,ES
@@ -40982,7 +40812,7 @@
2989883392,2989948927,UA
2989948928,2990014463,FI
2990014464,2990079999,PL
-2990080000,2990145535,RU
+2990080000,2990145535,GB
2990145536,2990211071,SI
2990211072,2990276607,GR
2990276608,2990342143,ES
@@ -41005,11 +40835,7 @@
2991128576,2991144959,PL
2991144960,2991161343,SA
2991161344,2991177727,FR
-2991177728,2991179263,SE
-2991179264,2991179327,SE
-2991179328,2991182943,SE
-2991182944,2991182975,SE
-2991182976,2991183071,SE
+2991177728,2991183071,SE
2991183072,2991183103,SE
2991183104,2991194111,SE
2991194112,2991210495,NO
@@ -41033,17 +40859,7 @@
2991521792,2991538175,RS
2991538176,2991554559,SI
2991554560,2991570943,GB
-2991570944,2991571455,IT
-2991571456,2991571967,GB
-2991571968,2991572479,IT
-2991572480,2991572991,IL
-2991572992,2991573503,GB
-2991573504,2991574015,ES
-2991574016,2991574527,DE
-2991574528,2991575039,GB
-2991575040,2991575551,NL
-2991575552,2991576063,GB
-2991576064,2991587327,IT
+2991570944,2991587327,IT
2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
@@ -41126,7 +40942,9 @@
2996928512,2996994047,RU
2996994048,2996996073,DE
2996996074,2996996074,DE
-2996996075,2997004607,DE
+2996996075,2996999679,DE
+2996999680,2996999935,GB
+2996999936,2997004607,DE
2997004608,2997004671,RU
2997004672,2997018623,DE
2997018624,2997019135,GB
@@ -41371,14 +41189,12 @@
3001815040,3001819135,RU
3001819136,3001823231,IR
3001823232,3001827327,GE
-3001827328,3001831039,SE
-3001831040,3001831327,IT
-3001831328,3001831423,SE
+3001827328,3001831423,SE
3001831424,3001835519,BA
3001835520,3001839615,RU
3001839616,3001843711,ES
-3001843712,3001846271,RU
-3001846272,3001846783,GB
+3001843712,3001845759,RU
+3001845760,3001846783,GB
3001846784,3001847807,RU
3001847808,3001851903,GB
3001851904,3001855999,IT
@@ -41405,7 +41221,7 @@
3001929728,3001933823,RS
3001933824,3001937919,ES
3001937920,3001942015,RU
-3001942016,3001946111,BY
+3001942016,3001944063,BY
3001946112,3001950207,RU
3001950208,3001954303,CZ
3001954304,3001958399,IT
@@ -41483,9 +41299,7 @@
3002691584,3002693631,MK
3002693632,3002695679,NO
3002695680,3002697727,RU
-3002697728,3002698239,DE
-3002698240,3002698751,NL
-3002698752,3002699775,DE
+3002697728,3002699775,DE
3002699776,3002701823,SE
3002701824,3002703871,NL
3002703872,3002705919,DE
@@ -41583,7 +41397,8 @@
3003074560,3003076607,IT
3003076608,3003078143,GB
3003078144,3003078151,US
-3003078152,3003080703,GB
+3003078152,3003078155,IN
+3003078156,3003080703,GB
3003080704,3003082751,FR
3003082752,3003084799,ES
3003086848,3003088895,RU
@@ -41596,7 +41411,8 @@
3003101184,3003103231,UA
3003103232,3003105279,IT
3003105280,3003107327,NL
-3003107328,3003109375,RU
+3003107328,3003107583,RU
+3003107584,3003109375,NL
3003109376,3003111423,FR
3003111424,3003113471,IT
3003113472,3003115519,ES
@@ -41610,14 +41426,23 @@
3003123968,3003124479,CO
3003124480,3003124735,AR
3003124736,3003125247,SV
+3003125248,3003125503,AR
+3003125504,3003125759,CO
3003125760,3003126783,CL
3003126784,3003127807,CR
+3003127808,3003128063,CO
3003129856,3003138047,CR
+3003154432,3003154687,CL
+3003154688,3003154943,EC
+3003154944,3003158527,AR
3003187200,3003252735,CO
3003252736,3003449343,CL
3003580416,3003645951,PE
+3003645952,3003777023,CL
3003908096,3004170239,CO
3004694528,3005218815,UY
+3005480960,3005874175,AR
+3006005248,3006267391,VE
3006267392,3006267647,PA
3006267648,3006267903,NI
3006267904,3006271231,PA
@@ -41639,19 +41464,24 @@
3006349312,3006351359,PE
3006351360,3006353407,AR
3006353408,3006357503,DO
+3006357504,3006361599,AR
3006361600,3006363647,HN
3006363648,3006365695,AR
3006365696,3006431231,CO
3006464000,3006480383,SV
3006496768,3006529535,CR
3006529536,3006660607,DO
+3006791680,3006922751,CL
3006922752,3006988287,BO
3007184896,3007250431,AR
3007250432,3007299583,CR
3007299584,3007301631,PA
-3007303680,3007305727,AR
-3007307776,3007311871,CL
-3007311872,3007315967,AR
+3007301632,3007305727,AR
+3007307776,3007310847,CL
+3007310848,3007312895,AR
+3007312896,3007313919,CL
+3007313920,3007314943,AR
+3007314944,3007315967,HN
3009413120,3019898879,BR
3019898880,3024093183,JP
3024093184,3024617471,KR
@@ -41663,18 +41493,23 @@
3025603840,3025604095,HK
3025604096,3025604351,IN
3025604352,3025604637,SG
-3025604638,3025633535,IN
+3025604638,3025607167,IN
+3025607168,3025607423,SG
+3025607424,3025607679,HK
+3025607680,3025633535,IN
3025633536,3025633791,HK
-3025633792,3025635839,IN
-3025635840,3025636095,SG
-3025636096,3025637375,IN
+3025633792,3025637375,IN
3025637376,3025637631,HK
3025637632,3025637887,MY
-3025637888,3025638399,IN
+3025637888,3025638279,IN
+3025638280,3025638287,SG
+3025638288,3025638399,IN
3025638400,3025638655,SG
3025638656,3025639167,IN
3025639168,3025639175,SG
-3025639176,3025647103,IN
+3025639176,3025639679,IN
+3025639680,3025639807,HK
+3025639808,3025647103,IN
3025647104,3025647359,SG
3025647360,3025647615,AU
3025647616,3025649151,IN
@@ -41929,8 +41764,10 @@
3037986816,3038773247,AR
3038773248,3038904319,CO
3039035392,3039166463,DO
+3039166464,3039231999,PA
3039297536,3039363071,PY
-3039363072,3039428607,BZ
+3039363072,3039412223,BZ
+3039412224,3039420415,CL
3039428608,3039559679,CL
3039690752,3039821823,AR
3039821824,3040870399,CO
@@ -41948,7 +41785,10 @@
3044208640,3044212735,BZ
3044212736,3044245503,HN
3044245504,3044278271,BO
-3044278272,3044503551,AR
+3044278272,3044417535,AR
+3044417536,3044425727,PA
+3044425728,3044442111,AR
+3044458496,3044503551,AR
3044503552,3044507647,US
3044507648,3044540415,AR
3044802560,3045064703,PY
@@ -41957,6 +41797,8 @@
3047424000,3047948287,AR
3047948288,3048079359,CL
3048079360,3048095743,CO
+3048128512,3048144895,CR
+3048144896,3048210431,EC
3048210432,3048275967,PE
3048275968,3048292351,AR
3048292352,3048308735,BZ
@@ -41980,14 +41822,21 @@
3049193472,3049255935,PA
3049255936,3049256959,US
3049256960,3049259007,PA
-3049259008,3049267199,AR
+3049259008,3049283583,AR
3049283584,3049291775,BZ
3049291776,3049324543,CO
3049324544,3049521151,CR
-3049652224,3049783295,EC
+3049652224,3049750527,EC
+3049750528,3049754623,PE
+3049754624,3049762815,AR
+3049762816,3049766911,HN
+3049766912,3049775103,CO
+3049775104,3049783295,PA
3049783296,3050045439,CL
-3050307584,3050340351,VE
+3050045440,3050307583,CO
+3050307584,3050373119,VE
3050373120,3050405887,AR
+3050405888,3050438655,GT
3050438656,3050504191,HN
3051356160,3051376895,CR
3051376896,3051377151,PA
@@ -42001,17 +41850,21 @@
3051398144,3051399167,AR
3051399168,3051400191,DO
3051400192,3051401215,EC
-3051401216,3051403263,AR
+3051401216,3051405311,AR
3051405312,3051407359,CR
3051407360,3051408383,PE
3051408384,3051409407,DO
3051409408,3051411455,AR
3051411456,3051413503,CR
3051413504,3051421695,PE
+3051421696,3051429887,AR
3051429888,3051438079,VE
-3051438080,3051442175,CO
-3051446272,3051450367,CO
+3051438080,3051450367,CO
3051450368,3051454463,CL
+3051454464,3051456511,SV
+3051456512,3051457535,AR
+3051457536,3051460607,CL
+3051460608,3051462655,AR
3051462656,3051470847,PE
3051479040,3051487231,CU
3051487232,3051552767,CL
@@ -42026,7 +41879,7 @@
3051971840,3051972351,PA
3051972352,3051973887,CR
3051973888,3051974143,PA
-3051974144,3051986943,CR
+3051974144,3051995135,CR
3051995136,3052011519,PE
3052011520,3052273663,CO
3052273664,3052404735,AR
@@ -42128,9 +41981,7 @@
3063988224,3064004607,JP
3064004608,3064012799,LK
3064020992,3064023039,JP
-3064023040,3064023551,SG
-3064023552,3064023807,JP
-3064023808,3064024063,SG
+3064023040,3064024063,SG
3064024064,3064025087,JP
3064025088,3064029183,VN
3064029184,3064135679,KR
@@ -42167,7 +42018,6 @@
3068987392,3068990463,IN
3068990464,3068991487,VN
3068991488,3068992511,IN
-3068992512,3068993535,PH
3068993536,3069018111,KR
3069018112,3069034495,IN
3069034496,3069050879,KR
@@ -42346,13 +42196,18 @@
3103852544,3103852799,AE
3103852800,3103853567,PL
3103853568,3103853823,NO
+3103853824,3103854079,RU
+3103854080,3103854335,FR
+3103854336,3103854591,AE
+3103854592,3103854847,UA
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
-3103919104,3103920127,US
+3103919104,3103920127,IR
3103920128,3103921151,DE
3103921152,3103922175,CH
-3103922176,3103924223,NL
+3103922176,3103923199,NL
+3103923200,3103924223,SE
3103924224,3103925247,RU
3103925248,3103926271,PL
3103926272,3103927295,CZ
@@ -42395,12 +42250,9 @@
3103968256,3103969279,GB
3103969280,3103970303,BG
3103970304,3103971327,UA
-3103971328,3103972351,GB
-3103972352,3103972863,IE
-3103972864,3103973375,GB
+3103971328,3103973375,GB
3103973376,3103974399,KZ
-3103974400,3103974911,LT
-3103974912,3103975423,SE
+3103974400,3103975423,SE
3103975424,3103976447,SA
3103976448,3103977471,GB
3103977472,3103978495,NL
@@ -42451,7 +42303,7 @@
3104025600,3104026623,RU
3104026624,3104027647,NL
3104027648,3104028671,RU
-3104028672,3104030719,DE
+3104028672,3104029695,DE
3104030720,3104031743,HR
3104031744,3104032767,FR
3104032768,3104033791,IR
@@ -42572,11 +42424,10 @@
3104153600,3104154623,RU
3104154624,3104155647,DK
3104155648,3104156671,DE
-3104156672,3104157695,RO
-3104157696,3104158719,TR
+3104156672,3104157697,RO
+3104157698,3104158719,TR
3104158720,3104159743,IT
-3104159744,3104160255,DE
-3104160256,3104160767,CH
+3104159744,3104160767,CH
3104160768,3104161791,GB
3104161792,3104162815,RU
3104162816,3104164863,IT
@@ -42613,7 +42464,7 @@
3104195584,3104196607,DE
3104196608,3104197631,IT
3104197632,3104198655,GR
-3104198656,3104199679,RU
+3104198656,3104199679,GB
3104199680,3104200703,NL
3104200704,3104201727,IT
3104201728,3104202751,FR
@@ -42757,8 +42608,7 @@
3104349184,3104350207,RU
3104350208,3104352255,CZ
3104352256,3104353279,DE
-3104353280,3104353792,IR
-3104353793,3104354303,DE
+3104353280,3104354303,IR
3104354304,3104355327,NL
3104355328,3104356351,RU
3104356352,3104357375,AT
@@ -42903,10 +42753,7 @@
3104514048,3104515071,RU
3104515072,3104516095,GB
3104516096,3104517119,CY
-3104517120,3104517630,US
-3104517631,3104517631,IL
-3104517632,3104518142,US
-3104518143,3104518143,IL
+3104517120,3104518143,IL
3104518144,3104519167,RU
3104519168,3104520191,IT
3104520192,3104521215,CH
@@ -43028,7 +42875,7 @@
3104642048,3104643071,KZ
3104643072,3104644095,RU
3104644096,3104645119,DE
-3104645120,3104646143,RU
+3104645120,3104646143,GB
3104646144,3104647167,FR
3104647168,3104648191,GB
3104648192,3104649215,RU
@@ -43112,7 +42959,6 @@
3104735232,3104736255,FR
3104736256,3104737279,JO
3104737280,3104738303,GB
-3104738304,3104739327,KW
3104739328,3104740351,GB
3104740352,3104741375,PL
3104741376,3104742399,GB
@@ -43246,8 +43092,7 @@
3104879616,3104880639,CZ
3104880640,3104881663,DE
3104881664,3104882687,AT
-3104882688,3104883199,MT
-3104883200,3104883711,DK
+3104882688,3104883711,MT
3104883712,3104884735,DE
3104884736,3104885759,SE
3104885760,3104886783,GB
@@ -43336,8 +43181,7 @@
3104974848,3104975871,AL
3104975872,3104976895,RU
3104976896,3104977919,GB
-3104977920,3104978431,NL
-3104978432,3104978943,DE
+3104977920,3104978943,DE
3104978944,3104979967,BG
3104979968,3104980991,HR
3104980992,3104982015,SK
@@ -43420,7 +43264,6 @@
3105064960,3105065983,FR
3105065984,3105067007,IT
3105067008,3105068031,GB
-3105068032,3105069055,CH
3105069056,3105070079,TR
3105070080,3105071103,ES
3105071104,3105072127,FR
@@ -43487,7 +43330,7 @@
3105138688,3105139711,NO
3105139712,3105140735,PL
3105140736,3105142783,RU
-3105142784,3105143807,NL
+3105142784,3105143807,UA
3105143808,3105144831,DE
3105144832,3105145855,ES
3105145856,3105146879,CZ
@@ -43808,7 +43651,7 @@
3105490944,3105491967,SE
3105491968,3105494015,GB
3105494016,3105495039,BE
-3105495040,3105496063,AE
+3105495040,3105496063,A2
3105496064,3105497087,RU
3105497088,3105498111,IR
3105498112,3105499135,DE
@@ -43829,7 +43672,7 @@
3105515520,3105516543,FR
3105516544,3105517567,NL
3105517568,3105518591,RU
-3105518592,3105519615,GB
+3105518592,3105519615,US
3105519616,3105520639,RU
3105520640,3105521663,FR
3105521664,3105522687,NO
@@ -43845,7 +43688,7 @@
3105531904,3105532927,RU
3105532928,3105533951,RS
3105533952,3105534975,BA
-3105534976,3105535999,NO
+3105534976,3105535999,EU
3105536000,3105537023,AZ
3105537024,3105538047,AT
3105538048,3105539071,RU
@@ -43859,9 +43702,10 @@
3105546240,3105547263,ES
3105547264,3105548287,GB
3105548288,3105549311,IR
-3105549312,3105550335,AT
+3105549312,3105550335,RU
3105550336,3105551359,SK
-3105551360,3105553407,FR
+3105551360,3105552383,US
+3105552384,3105553407,FR
3105553408,3105554431,DE
3105554432,3105555455,DK
3105555456,3105556479,CH
@@ -43890,7 +43734,8 @@
3105581056,3105582079,IL
3105582080,3105583103,CH
3105583104,3105584127,DK
-3105584128,3105585151,JO
+3105584128,3105585151,EG
+3105585152,3105586175,AT
3105586176,3105587199,ES
3105587200,3105588223,RS
3105588224,3105589247,GB
@@ -43905,6 +43750,295 @@
3105599488,3105600511,GB
3105600512,3105601535,DE
3105601536,3105602559,CH
+3105602560,3105603583,PL
+3105603584,3105604607,RU
+3105604608,3105605631,GB
+3105605632,3105606655,ES
+3105606656,3105607679,DK
+3105607680,3105608703,RU
+3105608704,3105609727,DE
+3105609728,3105610751,IQ
+3105610752,3105611775,SA
+3105611776,3105612799,FR
+3105612800,3105613823,US
+3105613824,3105614847,SE
+3105614848,3105615871,NL
+3105615872,3105616895,SE
+3105616896,3105617919,GB
+3105617920,3105618943,NL
+3105618944,3105619967,DE
+3105619968,3105620991,TR
+3105620992,3105622015,DE
+3105622016,3105623039,SI
+3105623040,3105624063,GB
+3105624064,3105625087,PL
+3105625088,3105626111,US
+3105626112,3105627135,GB
+3105627136,3105628159,FR
+3105628160,3105629183,GB
+3105629184,3105630207,BE
+3105630208,3105631231,FR
+3105631232,3105632255,GB
+3105632256,3105633279,ES
+3105633280,3105634303,IT
+3105634304,3105635327,NL
+3105635328,3105636351,GB
+3105636352,3105637375,IT
+3105637376,3105637631,NL
+3105637632,3105637887,DE
+3105637888,3105638399,US
+3105638400,3105639423,IM
+3105639424,3105640447,DE
+3105640448,3105641471,IT
+3105641472,3105642495,NL
+3105642496,3105644543,GB
+3105644544,3105645567,DE
+3105645568,3105646591,SK
+3105646592,3105647615,MD
+3105647616,3105648639,UA
+3105648640,3105649663,GB
+3105649664,3105650687,PL
+3105650688,3105651711,EE
+3105651712,3105652735,SK
+3105652736,3105653759,NO
+3105653760,3105654783,TR
+3105654784,3105655807,SE
+3105655808,3105656831,ES
+3105656832,3105657855,SK
+3105657856,3105658879,NL
+3105658880,3105659903,IL
+3105659904,3105660927,DE
+3105660928,3105661951,TR
+3105661952,3105662975,GB
+3105662976,3105663999,ES
+3105664000,3105665023,DE
+3105665024,3105666047,PL
+3105666048,3105667071,GB
+3105667072,3105668095,DE
+3105668096,3105669119,NL
+3105669120,3105670143,CZ
+3105670144,3105671167,IE
+3105671168,3105673215,GB
+3105673216,3105674239,DE
+3105674240,3105675263,GB
+3105675264,3105676287,ES
+3105676288,3105678335,NL
+3105678336,3105679359,DE
+3105679360,3105680383,FR
+3105680384,3105681407,UA
+3105681408,3105682431,GB
+3105682432,3105683455,FI
+3105683456,3105684479,PL
+3105684480,3105686527,GB
+3105686528,3105687551,BE
+3105687552,3105688575,EU
+3105688576,3105689599,PL
+3105689600,3105690623,SI
+3105690624,3105691647,SE
+3105691648,3105692671,GR
+3105692672,3105693695,DE
+3105693696,3105696767,FR
+3105696768,3105697791,GB
+3105697792,3105698815,FR
+3105698816,3105700863,RU
+3105700864,3105701887,NL
+3105701888,3105702911,FR
+3105702912,3105703935,ES
+3105703936,3105704959,IT
+3105704960,3105705983,DK
+3105705984,3105707007,HU
+3105707008,3105708031,PL
+3105708032,3105709055,AT
+3105709056,3105710079,SA
+3105710080,3105711103,IT
+3105711104,3105712127,RS
+3105712128,3105713151,IT
+3105713152,3105714175,NL
+3105714176,3105715199,SE
+3105715200,3105716223,DE
+3105716224,3105717247,TR
+3105717248,3105719295,RU
+3105719296,3105721343,GB
+3105721344,3105722367,SI
+3105722368,3105723391,IT
+3105723392,3105724415,FR
+3105724416,3105725439,CH
+3105725440,3105726463,SK
+3105726464,3105727487,IT
+3105727488,3105727743,NO
+3105727744,3105727999,BE
+3105728000,3105728127,AT
+3105728128,3105728191,FI
+3105728192,3105728255,PT
+3105728256,3105728319,TR
+3105728320,3105728383,PL
+3105728384,3105728447,CZ
+3105728448,3105728511,LT
+3105728512,3105729535,DE
+3105729536,3105731583,GB
+3105731584,3105732607,FR
+3105732608,3105733631,KG
+3105733632,3105734655,DE
+3105734656,3105735679,TR
+3105735680,3105736703,IS
+3105736704,3105737727,NL
+3105737728,3105738751,IT
+3105738752,3105739775,GB
+3105739776,3105740799,ES
+3105740800,3105741823,DE
+3105741824,3105742847,IR
+3105742848,3105744895,GB
+3105744896,3105745919,FR
+3105745920,3105746943,UA
+3105746944,3105747967,DE
+3105747968,3105748991,FR
+3105748992,3105750015,IT
+3105750016,3105751039,UA
+3105751040,3105752063,RU
+3105752064,3105753087,IR
+3105753088,3105754111,GB
+3105754112,3105756159,RU
+3105756160,3105757183,US
+3105757184,3105758207,GB
+3105758208,3105759231,FR
+3105759232,3105760255,DE
+3105760256,3105761279,LB
+3105761280,3105762303,RU
+3105762304,3105763327,IT
+3105763328,3105764351,FR
+3105764352,3105765375,BE
+3105765376,3105766399,NL
+3105766400,3105770495,IT
+3105770496,3105771519,IR
+3105771520,3105772543,IT
+3105772544,3105773567,UA
+3105773568,3105774591,AZ
+3105774592,3105775615,FR
+3105775616,3105776639,RU
+3105776640,3105777663,DK
+3105777664,3105778687,RU
+3105778688,3105780735,IT
+3105780736,3105781759,RU
+3105781760,3105782783,SK
+3105782784,3105783807,PL
+3105783808,3105785855,FR
+3105785856,3105786879,SI
+3105786880,3105787903,ES
+3105787904,3105788927,AL
+3105788928,3105789951,SA
+3105789952,3105790975,SE
+3105790976,3105791999,DE
+3105792000,3105793023,DK
+3105793024,3105794047,NL
+3105794048,3105795071,GB
+3105795072,3105796095,LU
+3105796096,3105797119,NL
+3105797120,3105798143,IT
+3105798144,3105799167,IS
+3105799168,3105800191,IT
+3105800192,3105801215,RU
+3105801216,3105802239,ES
+3105802240,3105803263,UA
+3105803264,3105804287,NL
+3105804288,3105805311,FR
+3105805312,3105806335,GB
+3105806336,3105807359,FR
+3105807360,3105808383,RU
+3105808384,3105809407,NO
+3105809408,3105810431,RU
+3105810432,3105811455,IL
+3105811456,3105812479,NL
+3105812480,3105814527,ES
+3105814528,3105815551,JO
+3105815552,3105816575,BE
+3105816576,3105817599,FR
+3105817600,3105818623,DE
+3105818624,3105819647,NL
+3105819648,3105820671,GB
+3105820672,3105821695,US
+3105821696,3105822719,ES
+3105822720,3105823743,PL
+3105823744,3105824767,AT
+3105824768,3105825791,RS
+3105825792,3105826815,CZ
+3105826816,3105827839,FR
+3105827840,3105828863,LV
+3105828864,3105829887,PL
+3105829888,3105830911,AT
+3105830912,3105831935,IT
+3105831936,3105832959,DE
+3105832960,3105833983,IT
+3105833984,3105835007,FI
+3105835008,3105836031,KZ
+3105836032,3105837055,DK
+3105837056,3105838079,PL
+3105838080,3105839103,UA
+3105839104,3105840127,PL
+3105840128,3105841151,EE
+3105841152,3105842175,IE
+3105842176,3105843199,CH
+3105843200,3105844223,ES
+3105844224,3105847295,RU
+3105847296,3105848319,BG
+3105848320,3105849343,IR
+3105849344,3105850367,US
+3105850368,3105851391,RU
+3105851392,3105852415,FI
+3105852416,3105853439,SE
+3105853440,3105854463,NL
+3105854464,3105855487,FR
+3105855488,3105856511,GB
+3105856512,3105857535,PT
+3105857536,3105859583,RU
+3105859584,3105860607,GB
+3105860608,3105861631,NL
+3105861632,3105862655,DK
+3105862656,3105863679,CH
+3105863680,3105864703,PL
+3105864704,3105865727,AE
+3105865728,3105866751,RU
+3105866752,3105867775,SE
+3105867776,3105868799,NL
+3105868800,3105869823,GB
+3105869824,3105870847,DE
+3105870848,3105871871,AT
+3105871872,3105872895,PL
+3105872896,3105873919,GB
+3105873920,3105874943,AT
+3105874944,3105875967,NL
+3105875968,3105876991,GB
+3105876992,3105878015,ES
+3105878016,3105879039,EE
+3105879040,3105880063,NL
+3105880064,3105881087,CH
+3105881088,3105882111,GB
+3105882112,3105883135,MD
+3105883136,3105884159,PL
+3105884160,3105885183,SE
+3105885184,3105886207,TR
+3105886208,3105887231,ES
+3105887232,3105888255,AL
+3105888256,3105889279,RO
+3105889280,3105890303,ES
+3105890304,3105891327,DE
+3105891328,3105892351,PT
+3105892352,3105893375,GB
+3105893376,3105894399,AZ
+3105894400,3105895423,PL
+3105895424,3105896447,GB
+3105896448,3105897471,RU
+3105897472,3105898495,UA
+3105898496,3105899519,CZ
+3105899520,3105900543,RU
+3105900544,3105902591,GB
+3105902592,3105903615,DE
+3105903616,3105904639,RU
+3105904640,3105905663,NO
+3105905664,3105906687,IE
+3105906688,3105908735,FR
+3105908736,3105910783,GB
+3105910784,3105911807,IL
+3105911808,3105912831,DE
3120562176,3120594943,CO
3120594944,3120599039,AR
3120599040,3120601087,EC
@@ -44073,7 +44207,8 @@
3131310080,3131572223,VE
3131572224,3131834367,CO
3131834368,3132096511,CL
-3132096512,3132227583,CR
+3132096512,3132194815,CR
+3132219392,3132227583,AR
3132227584,3132293119,EC
3132293120,3132309503,HN
3132309504,3132313599,CR
@@ -44126,10 +44261,7 @@
3156759432,3156759432,GB
3156759433,3156803583,DE
3156803584,3156869119,TR
-3156869120,3156901887,LU
-3156901888,3156910079,SG
-3156910080,3156918271,US
-3156918272,3156934655,LU
+3156869120,3156934655,LU
3156934656,3157000191,RU
3157000192,3157008383,MK
3157008384,3157016575,RU
@@ -44223,17 +44355,19 @@
3158867968,3158884351,AZ
3158884352,3158885119,DE
3158885120,3158885887,TR
-3158885888,3158891775,DE
+3158885888,3158891551,DE
+3158891552,3158891583,GB
+3158891584,3158891775,DE
3158891776,3158892031,PL
-3158892032,3158897727,DE
+3158892032,3158892415,DE
+3158892416,3158892543,GB
+3158892544,3158897727,DE
3158897728,3158897791,RU
3158897792,3158897855,DE
3158897856,3158897919,UA
3158897920,3158898207,DE
3158898208,3158898271,CZ
-3158898272,3158898431,DE
-3158898432,3158898687,US
-3158898688,3158900735,DE
+3158898272,3158900735,DE
3158900736,3158917119,FR
3158917120,3158933503,DE
3158933504,3158949887,RU
@@ -44332,7 +44466,8 @@
3160315904,3160317951,KZ
3160317952,3160322047,RU
3160322048,3160324095,CH
-3160324096,3160328191,IT
+3160324096,3160325119,IT
+3160326144,3160328191,IT
3160328192,3160330239,FR
3160330240,3160332287,RU
3160332288,3160334335,NO
@@ -44422,12 +44557,7 @@
3161784320,3161800703,FI
3161800704,3161817087,SA
3161817088,3161833471,PL
-3161833472,3161835007,MK
-3161835008,3161839103,AT
-3161839104,3161840639,MK
-3161840640,3161843199,AT
-3161843200,3161844223,MK
-3161844224,3161849855,AT
+3161833472,3161849855,AT
3161849856,3161866239,BE
3161866240,3161882623,IR
3161882624,3161899007,DE
@@ -44491,9 +44621,7 @@
3162365952,3162374143,PL
3162374144,3162382335,BG
3162382336,3162390527,RU
-3162390528,3162392959,SE
-3162392960,3162393087,SE
-3162393088,3162398719,SE
+3162390528,3162398719,SE
3162398720,3162406911,BE
3162406912,3162415103,IR
3162415104,3162423295,DE
@@ -44513,13 +44641,9 @@
3162636288,3162669055,FR
3162669056,3162681343,RU
3162681344,3162682367,UA
-3162682368,3162682879,RU
-3162682880,3162683391,LV
-3162683392,3162685439,RU
+3162682368,3162685439,RU
3162685440,3162693631,UA
-3162693632,3162698751,RU
-3162698752,3162699263,NL
-3162699264,3162701823,RU
+3162693632,3162701823,RU
3162701824,3162734591,MD
3162734592,3162767359,RU
3162767360,3162800127,SA
@@ -44581,11 +44705,7 @@
3164936192,3164937749,LT
3164937750,3164937750,FR
3164937751,3164938239,LT
-3164938240,3164947967,FR
-3164947968,3164948479,BE
-3164948480,3164949503,FR
-3164949504,3164950015,BE
-3164950016,3164951663,FR
+3164938240,3164951663,FR
3164951664,3164951671,PL
3164951672,3164952224,FR
3164952225,3164952231,GB
@@ -44604,7 +44724,9 @@
3164968320,3164968447,GB
3164968448,3164969019,FR
3164969020,3164969023,BE
-3164969024,3164970923,FR
+3164969024,3164970413,FR
+3164970414,3164970415,IT
+3164970416,3164970923,FR
3164970924,3164970927,LT
3164970928,3164974335,FR
3164974336,3164974463,GB
@@ -44638,7 +44760,7 @@
3166654464,3166658559,RU
3166658560,3166662655,UA
3166662656,3166666751,RU
-3166666752,3166667263,DE
+3166666752,3166667263,PL
3166667264,3166667775,CZ
3166667776,3166668799,GB
3166668800,3166670847,RO
@@ -44657,13 +44779,9 @@
3166699520,3166961663,DE
3166961664,3167223807,SI
3167223808,3167748095,NL
-3167748096,3167781887,RO
-3167781888,3167782399,A2
-3167782400,3167870975,RO
+3167748096,3167870975,RO
3167870976,3167879167,MD
-3167879168,3167950847,RO
-3167950848,3167951359,A2
-3167951360,3167986687,RO
+3167879168,3167986687,RO
3167986688,3167987711,GB
3167987712,3167989759,MD
3167989760,3168005887,RO
@@ -44672,11 +44790,7 @@
3168096256,3168100351,MD
3168100352,3168110591,RO
3168110592,3168111615,GB
-3168111616,3168195583,RO
-3168195584,3168196095,DE
-3168196096,3168223743,RO
-3168223744,3168224255,MD
-3168224256,3168272383,RO
+3168111616,3168272383,RO
3168272384,3168534527,IT
3168534528,3168796671,GB
3168796672,3168829439,FR
@@ -44791,7 +44905,9 @@
3187947988,3187948799,GT
3187948800,3187948927,HN
3187948928,3187949567,GT
-3187949568,3187953663,BQ
+3187949568,3187950126,BQ
+3187950127,3187950127,CW
+3187950128,3187953663,BQ
3187953664,3187955711,CL
3187955712,3187957759,CR
3187957760,3187961855,CL
@@ -45256,8 +45372,12 @@
3195023360,3195024383,CL
3195024384,3195025407,UY
3195025408,3195043839,AR
-3195043840,3195060223,CO
-3195060224,3195064319,UY
+3195043840,3195056127,CO
+3195056128,3195060223,AR
+3195060224,3195061247,US
+3195062272,3195062783,US
+3195062784,3195063039,UY
+3195063040,3195063295,US
3195066368,3195067391,AR
3195067392,3195068415,CR
3195068416,3195076607,CW
@@ -45282,6 +45402,7 @@
3195205632,3195206655,PE
3195206656,3195207679,CL
3195207680,3195211775,GT
+3195211776,3195215871,BZ
3195215872,3195224063,AR
3195224064,3195232511,PA
3195232512,3195234559,CR
@@ -45337,9 +45458,15 @@
3195752448,3195763711,AR
3195763712,3195764735,BO
3195764736,3195768831,CR
+3195768832,3195772927,AR
3195772928,3195781119,VE
-3195781120,3195797503,PA
-3195797504,3195801599,AR
+3195781120,3195785215,PA
+3195785216,3195789311,HN
+3195789312,3195793407,PA
+3195793408,3195801599,AR
+3195801600,3195803647,HN
+3195803648,3195804671,CL
+3195804672,3195805695,VE
3195805696,3195807743,NI
3195807744,3195808639,BZ
3195808640,3195808767,CO
@@ -45423,6 +45550,8 @@
3200565248,3200569343,HT
3200569344,3200573439,CL
3200573440,3200577535,AR
+3200577536,3200579583,EC
+3200579584,3200581631,AR
3200581632,3200614399,BZ
3200614400,3200647167,AR
3200647168,3201302527,VE
@@ -45438,6 +45567,7 @@
3201534976,3201535999,CO
3201536000,3201540095,AR
3201540096,3201544191,CL
+3201544192,3201548287,DO
3201548288,3201556479,AR
3201556480,3201560575,BO
3201560576,3201561599,PY
@@ -45494,12 +45624,13 @@
3203661824,3203923967,AR
3203923968,3204448255,CO
3221226496,3221227519,KY
-3221227520,3221258239,US
+3221227520,3221242879,US
+3221242880,3221243391,GB
+3221243392,3221258239,US
3221258240,3221291007,CA
3221291008,3221334269,US
3221334270,3221334270,DZ
-3221334271,3221422079,US
-3221487616,3221560319,US
+3221334271,3221560319,US
3221560320,3221561343,GB
3221561344,3221562367,US
3221562368,3221562623,SE
@@ -45590,7 +45721,9 @@
3222072064,3222072319,SE
3222072320,3222075135,US
3222075136,3222075391,CH
-3222075392,3222305535,US
+3222075392,3222274559,US
+3222274560,3222274815,AU
+3222274816,3222305535,US
3222305536,3222309119,SE
3222309120,3222309375,DE
3222309376,3222313727,SE
@@ -45821,15 +45954,11 @@
3223582464,3223582719,NL
3223582720,3223582975,AU
3223583488,3223584767,US
-3223584768,3223598079,SE
-3223598080,3223598591,CZ
-3223598592,3223602687,SE
-3223602688,3223603199,CZ
-3223603200,3223619583,SE
-3223619584,3223620095,CZ
-3223620096,3223628799,SE
-3223628800,3223629311,CZ
-3223629312,3223650303,SE
+3223584768,3223594495,SE
+3223594496,3223595007,AT
+3223595008,3223599103,SE
+3223599104,3223599615,AT
+3223599616,3223650303,SE
3223650304,3223715839,CH
3223715840,3223781375,DK
3223781376,3223784191,US
@@ -46159,7 +46288,7 @@
3225427968,3225428991,US
3225429504,3225429759,CA
3225430016,3225431039,CA
-3225431040,3225431551,RU
+3225431040,3225431551,CZ
3225431552,3225434111,US
3225434112,3225436159,CA
3225436160,3225444607,US
@@ -46364,15 +46493,9 @@
3225874944,3225875199,GB
3225875456,3225875967,US
3225876480,3225878527,US
-3225878528,3225892351,SE
-3225892352,3225892863,FR
-3225892864,3225894399,SE
-3225894400,3225895423,GB
-3225895424,3225896447,SE
-3225896448,3225896959,CZ
-3225896960,3225900543,SE
-3225900544,3225901567,CZ
-3225901568,3225923327,SE
+3225878528,3225917183,SE
+3225917184,3225917439,NL
+3225917440,3225923327,SE
3225923328,3225923583,IN
3225923584,3225932543,SE
3225932544,3225932799,AT
@@ -46380,9 +46503,7 @@
3225933056,3225933311,AT
3225933312,3225934335,SE
3225934336,3225934591,AT
-3225934592,3225935871,SE
-3225935872,3225936383,CZ
-3225936384,3225936639,SE
+3225934592,3225936639,SE
3225936640,3225936895,US
3225936896,3225938175,SE
3225938176,3225938431,RU
@@ -46424,10 +46545,7 @@
3226177536,3226178559,US
3226178560,3226189823,CA
3226189824,3226191871,US
-3226191872,3226201087,CA
-3226201344,3226201855,CA
-3226201856,3226202111,US
-3226202112,3226206207,CA
+3226191872,3226206207,CA
3226206208,3226207231,US
3226207744,3226215423,GB
3226215424,3226236927,US
@@ -46457,9 +46575,7 @@
3226305536,3226307327,GB
3226307328,3226307583,US
3226307584,3226308095,ES
-3226308096,3226365439,US
-3226365440,3226365951,DE
-3226365952,3226374143,US
+3226308096,3226374143,US
3226374144,3226375423,DE
3226375424,3226397695,US
3226397696,3226400255,DE
@@ -46838,7 +46954,9 @@
3227452736,3227452767,US
3227452768,3227454687,CA
3227454688,3227454719,US
-3227454720,3227455487,CA
+3227454720,3227455047,CA
+3227455048,3227455051,US
+3227455052,3227455487,CA
3227455488,3227456255,US
3227456256,3227457023,CA
3227457024,3227457535,US
@@ -46846,7 +46964,9 @@
3227459002,3227459002,US
3227459003,3227461119,CA
3227461120,3227461631,US
-3227461632,3227464447,CA
+3227461632,3227461959,CA
+3227461960,3227461963,US
+3227461964,3227464447,CA
3227464448,3227464575,US
3227464576,3227465147,CA
3227465148,3227465151,US
@@ -46864,6 +46984,7 @@
3227574272,3227582463,ZA
3227582464,3227647999,US
3227648000,3227713535,FI
+3227713536,3227779071,CA
3227779328,3227779583,ZA
3227779584,3227779839,KR
3227779840,3227783679,US
@@ -47134,9 +47255,7 @@
3228336128,3228336639,CZ
3228336640,3228342783,SK
3228342784,3228343039,CZ
-3228343040,3228343295,SK
-3228343296,3228343551,CZ
-3228343552,3228344063,SK
+3228343040,3228344063,SK
3228344064,3228344575,CZ
3228344576,3228348159,SK
3228348160,3228353279,US
@@ -47158,7 +47277,9 @@
3228405760,3228406015,IN
3228406016,3228406271,US
3228406272,3228407039,FR
-3228407040,3228430847,DE
+3228407040,3228413183,DE
+3228413184,3228413695,SG
+3228413696,3228430847,DE
3228430848,3228431103,ZA
3228431104,3228434431,DE
3228434432,3228477695,US
@@ -47223,27 +47344,31 @@
3228631040,3228696575,NL
3228696576,3228826371,IL
3228826372,3228826372,US
-3228826373,3228827647,IL
-3228827648,3228828159,PS
-3228828160,3228829183,IL
-3228829184,3228829695,PS
-3228829696,3228830719,IL
+3228826373,3228830719,IL
3228830720,3228833791,PS
3228833792,3229024255,IL
3229024256,3229061119,US
3229061120,3229062433,CA
3229062434,3229062450,US
-3229062451,3229062655,CA
-3229062656,3229063167,US
-3229063168,3229064951,CA
+3229062451,3229064951,CA
3229064952,3229064955,US
3229064956,3229065215,CA
-3229065216,3229093119,US
-3229093120,3229093375,AU
-3229093376,3229155327,US
-3229155328,3229195263,SE
+3229065216,3229092607,US
+3229092608,3229092863,AU
+3229092864,3229093119,US
+3229093120,3229093631,AU
+3229093632,3229155327,US
+3229155328,3229159423,SE
+3229159424,3229159935,AT
+3229159936,3229160959,SE
+3229160960,3229161471,AT
+3229161472,3229183999,SE
+3229184000,3229184511,AT
+3229184512,3229195263,SE
3229195264,3229196287,DE
-3229196288,3229220863,SE
+3229196288,3229196799,SE
+3229196800,3229197311,AT
+3229197312,3229220863,SE
3229220864,3229245439,GB
3229245440,3229246463,US
3229246464,3229254399,GB
@@ -47810,9 +47935,10 @@
3231121408,3231149311,US
3231149312,3231149567,CA
3231149568,3231154431,US
-3231155200,3231155711,US
-3231155712,3231156223,CA
-3231156224,3231188479,US
+3231155200,3231156223,CA
+3231156224,3231174655,US
+3231174656,3231182847,CN
+3231182848,3231188479,US
3231188480,3231188735,NO
3231188736,3231190527,US
3231190528,3231190783,GB
@@ -47939,8 +48065,7 @@
3231352832,3231358975,CA
3231358976,3231383551,US
3231383552,3231385599,NO
-3231385600,3231408127,US
-3231416320,3231475199,US
+3231385600,3231475199,US
3231475200,3231475455,PL
3231475456,3231477759,US
3231477760,3231478015,CA
@@ -47980,15 +48105,15 @@
3231515648,3231516159,US
3231516672,3231519231,SE
3231519744,3231526911,US
-3231526912,3231529007,CA
+3231526912,3231528959,A2
+3231528960,3231529007,CA
3231529008,3231529015,US
3231529016,3231531007,CA
3231531008,3231539199,US
+3231539200,3231547391,CA
3231547392,3231547647,US
3231547648,3231547903,NO
-3231547904,3231550207,US
-3231550208,3231550719,DE
-3231550720,3231551231,US
+3231547904,3231551231,US
3231551232,3231551999,CA
3231552000,3231553023,US
3231553024,3231553791,JP
@@ -48050,7 +48175,7 @@
3231675904,3231676159,IE
3231676672,3231676927,FR
3231676928,3231677183,FI
-3231677440,3231686655,US
+3231677440,3231694847,US
3231694848,3231711231,CA
3231711232,3231713023,US
3231713024,3231713279,CA
@@ -48133,6 +48258,7 @@
3231793152,3231793663,BE
3231794176,3231800319,US
3231800320,3231801343,CN
+3231801344,3231809535,CA
3231809536,3231810047,NZ
3231810560,3231825919,US
3231825920,3231842303,CA
@@ -48289,10 +48415,11 @@
3232759808,3232772095,SE
3232772096,3232774143,IT
3232774144,3232825343,SE
-3232890880,3233288191,US
+3232825344,3233288191,US
3233288192,3233292287,CA
-3233292288,3233349631,US
-3233480704,3233484799,US
+3233292288,3233431551,US
+3233431552,3233464319,CA
+3233464320,3233484799,US
3233484800,3233487359,ES
3233487872,3233488895,CA
3233488896,3233548287,US
@@ -48561,8 +48688,7 @@
3234240388,3234240511,EU
3234240512,3234240607,US
3234240608,3234240611,IL
-3234240612,3234250751,US
-3234267136,3234269695,US
+3234240612,3234269695,US
3234270208,3234271231,CA
3234271232,3234275327,PT
3234275328,3234279423,AU
@@ -48570,10 +48696,10 @@
3234283520,3234310367,US
3234310368,3234310371,HK
3234310372,3234316287,US
-3234332672,3234349055,US
+3234316288,3234320383,CA
+3234320384,3234349055,US
3234349056,3234353151,NZ
-3234353152,3234381823,US
-3234398208,3234549759,US
+3234353152,3234549759,US
3234549760,3234550015,RU
3234553856,3234556415,US
3234556416,3234556927,CA
@@ -48692,8 +48818,7 @@
3234855168,3234855935,US
3234856192,3234856447,US
3234856960,3234861055,CA
-3234861056,3234906111,US
-3234922496,3234988031,US
+3234861056,3234988031,US
3234988032,3234991103,CA
3234991104,3235004415,US
3235004416,3235020799,CA
@@ -48706,9 +48831,7 @@
3235276800,3235278847,US
3235278848,3235282943,BB
3235282944,3235315711,CA
-3235315712,3235389439,US
-3235389440,3235389951,VE
-3235389952,3235512319,US
+3235315712,3235512319,US
3235512320,3235577855,JP
3235577856,3235643391,CA
3235643392,3235774463,US
@@ -48806,43 +48929,35 @@
3236623616,3236623871,AU
3236623872,3236625919,US
3236625920,3236626175,CA
-3236626432,3236659199,US
+3236626432,3236638719,US
+3236638720,3236642815,BB
+3236642816,3236659199,US
3236659200,3236691967,CA
3236691968,3236694271,US
3236695040,3236696063,CA
3236696064,3236757503,US
3236757504,3236765695,CA
-3236765696,3236774911,US
-3236774912,3236775423,HK
-3236775424,3236775679,US
-3236775680,3236776191,CA
-3236776192,3236778239,US
-3236778240,3236778751,GB
-3236778752,3236781823,US
-3236781824,3236782335,ES
-3236782336,3236784383,US
-3236784384,3236784895,IT
-3236784896,3236786687,US
-3236786688,3236787199,CA
-3236787200,3236788479,US
+3236765696,3236788479,US
3236788480,3236789503,GB
-3236789504,3236790271,US
+3236789504,3236823039,US
3236823040,3236826111,CH
3236826112,3236827135,CA
-3236827136,3236855807,US
-3236888576,3236958207,US
+3236827136,3236828159,US
+3236828160,3236829183,US
+3236829184,3236829951,US
+3236829952,3236958207,US
3236958208,3236962303,AU
-3236962304,3237003263,US
-3237019648,3237022207,US
-3237022208,3237022719,CA
-3237022720,3237023231,US
-3237023232,3237023743,CA
+3236962304,3237021695,US
+3237021696,3237023743,CA
3237023744,3237036031,US
-3237085184,3237154815,US
+3237036032,3237052415,CA
+3237052416,3237154815,US
3237154816,3237155839,ES
3237155840,3237156863,AU
3237156864,3237163007,US
3237163008,3237167103,DM
+3237167104,3237179391,US
+3237179392,3237183487,CA
3237183488,3237216255,US
3237216256,3237281791,JP
3237281792,3237285119,US
@@ -48907,7 +49022,10 @@
3237554432,3237554434,AU
3237554435,3237554435,AP
3237554436,3237554687,AU
-3237554688,3237560319,US
+3237554688,3237568511,US
+3237568512,3237572607,CA
+3237572608,3237576703,US
+3237576704,3237609471,CA
3237609472,3237613567,US
3237613568,3237614591,CA
3237615104,3237615615,US
@@ -48922,8 +49040,7 @@
3237647104,3237647359,AU
3237647360,3237648639,US
3237648640,3237648895,AU
-3237648896,3237658623,US
-3237675008,3237681663,US
+3237648896,3237681663,US
3237681664,3237682943,CA
3237682944,3237684991,US
3237684992,3237685247,CL
@@ -48952,9 +49069,16 @@
3237733071,3237733119,DE
3237734144,3237734399,CA
3237734400,3237773311,US
+3237773312,3237777407,CA
+3237777408,3237781503,US
+3237781504,3237785599,CA
+3237785600,3237797887,US
+3237797888,3237801983,CA
3237806080,3237857535,US
3237858304,3237863423,CA
-3237863424,3237887999,US
+3237863424,3237896191,US
+3237896192,3237900287,PR
+3237900288,3237937151,US
3238002688,3238008831,NL
3238008832,3238009855,EU
3238009856,3238010879,IE
@@ -49027,9 +49151,7 @@
3238067968,3238068223,GB
3238068224,3238133759,IE
3238133760,3238199295,SI
-3238199296,3238201599,DK
-3238201600,3238202367,US
-3238202368,3238264831,DK
+3238199296,3238264831,DK
3238264832,3238330367,IS
3238330368,3238337023,CH
3238337024,3238337535,LI
@@ -49090,7 +49212,7 @@
3238599936,3238600703,HU
3238600704,3238604799,DE
3238604800,3238606335,NL
-3238606336,3238606591,EU
+3238606336,3238606591,SE
3238606592,3238607359,NL
3238607360,3238607871,SE
3238607872,3238608895,NL
@@ -49102,7 +49224,7 @@
3238623744,3238623999,CH
3238624000,3238624255,PL
3238624256,3238625279,HU
-3238625280,3238630399,EU
+3238625280,3238630399,LU
3238630400,3238631423,GR
3238631424,3238632959,GB
3238632960,3238633215,UA
@@ -49130,7 +49252,9 @@
3238843392,3238844415,EE
3238844416,3238847487,SE
3238847488,3238848511,NL
-3238848512,3238865919,SE
+3238848512,3238860799,SE
+3238860800,3238862847,HR
+3238862848,3238865919,SE
3238865920,3238867967,NL
3238867968,3238887423,SE
3238887424,3238888447,NL
@@ -49140,11 +49264,14 @@
3238897664,3238899711,NL
3238899712,3238901759,SE
3238901760,3238902783,NL
-3238902784,3238909951,SE
+3238902784,3238903807,SE
+3238903808,3238905855,HR
+3238905856,3238909951,SE
3238909952,3238910975,NL
3238910976,3238911999,SE
3238912000,3238913023,NL
-3238913024,3238916095,SE
+3238913024,3238914047,SE
+3238914048,3238916095,HR
3238916096,3238917119,NL
3238917120,3238919167,SE
3238919168,3238920191,NL
@@ -49200,7 +49327,7 @@
3239105280,3239105535,CH
3239105536,3239105791,DE
3239105792,3239106047,RO
-3239106048,3239106559,DE
+3239106048,3239106559,AT
3239106560,3239106815,ES
3239106816,3239107071,CH
3239107072,3239107327,RO
@@ -49989,7 +50116,6 @@
3240192512,3240193023,RO
3240193024,3240193535,GB
3240193536,3240194047,PL
-3240194048,3240194559,GB
3240194560,3240195071,AT
3240195072,3240195583,GB
3240195584,3240196095,RO
@@ -50001,7 +50127,7 @@
3240199168,3240199679,RU
3240199680,3240200191,NL
3240200192,3240200703,RO
-3240200704,3240201215,SE
+3240200704,3240201215,GB
3240201216,3240201727,RO
3240201728,3240202239,CH
3240202240,3240202751,RU
@@ -50065,7 +50191,8 @@
3240241152,3240241407,EU
3240241408,3240242175,FI
3240242176,3240243199,PL
-3240243200,3240244223,GB
+3240243200,3240243711,GB
+3240243712,3240244223,DE
3240244224,3240245247,PL
3240245248,3240246271,IL
3240246272,3240247295,UA
@@ -50174,7 +50301,8 @@
3240324864,3240325119,SI
3240325120,3240361983,GB
3240361984,3240362239,TR
-3240362240,3240370175,GB
+3240362240,3240362495,DE
+3240362496,3240370175,GB
3240370176,3240370431,CH
3240370432,3240370687,DE
3240370688,3240370943,GB
@@ -50361,7 +50489,7 @@
3240739072,3240739327,CH
3240739328,3240739583,FR
3240739584,3240739839,LV
-3240739840,3240740095,US
+3240739840,3240740095,DE
3240740096,3240740351,LT
3240740352,3240740607,IT
3240740608,3240741119,DE
@@ -50523,7 +50651,6 @@
3241036800,3241037055,GB
3241037056,3241037311,RU
3241037312,3241037567,BE
-3241037568,3241037823,DK
3241037824,3241038079,NL
3241038080,3241038335,UA
3241038336,3241038591,DE
@@ -50640,9 +50767,7 @@
3241481728,3241481983,PT
3241481984,3241482239,DE
3241482240,3241484799,SE
-3241484800,3241485311,BE
-3241485312,3241485567,GB
-3241485568,3241496575,BE
+3241484800,3241496575,BE
3241496576,3241496831,AT
3241496832,3241497343,BE
3241497344,3241497599,UA
@@ -50655,7 +50780,7 @@
3241499904,3241500159,DE
3241500160,3241500671,GB
3241500672,3241501439,BE
-3241501440,3241501951,GB
+3241501440,3241501951,EU
3241501952,3241502463,BE
3241503232,3241503487,RS
3241503488,3241508095,BE
@@ -50729,9 +50854,7 @@
3242590208,3242655743,IT
3242655744,3242721279,NO
3242721280,3242852351,CH
-3242852352,3242911231,BE
-3242911232,3242911743,NL
-3242911744,3242917887,BE
+3242852352,3242917887,BE
3242917888,3242950655,NO
3242950656,3242983423,BE
3242983424,3243048959,IT
@@ -50831,11 +50954,8 @@
3243982848,3243991039,HU
3243991040,3243999231,BE
3243999232,3244031999,NO
-3244032000,3244034047,GR
-3244034048,3244035071,CY
-3244035072,3244097535,GR
+3244032000,3244097535,GR
3244097536,3244098559,DE
-3244098560,3244099583,GB
3244099584,3244100607,FR
3244100608,3244102655,UA
3244102656,3244103679,CH
@@ -50897,15 +51017,9 @@
3244452864,3244453119,EU
3244453120,3244545279,DE
3244545280,3244545535,EU
-3244545536,3244592127,DE
-3244592128,3244592639,CH
-3244592640,3244624895,DE
+3244545536,3244624895,DE
3244624896,3244625919,CH
-3244625920,3244794367,DE
-3244794368,3244794879,CA
-3244794880,3244813311,DE
-3244813312,3244813823,CA
-3244813824,3244818431,DE
+3244625920,3244818431,DE
3244818432,3244818687,ES
3244818688,3244818943,AT
3244818944,3244819199,PL
@@ -51612,7 +51726,7 @@
3245162496,3245163007,DE
3245163008,3245163519,KE
3245163520,3245164543,RU
-3245164544,3245165055,DE
+3245164544,3245165055,BE
3245165056,3245165567,AT
3245165568,3245166079,RU
3245166080,3245166591,TZ
@@ -51860,10 +51974,10 @@
3245307392,3245307903,FI
3245307904,3245308415,RO
3245308416,3245308927,ES
-3245308928,3245309439,SE
+3245309184,3245309439,SE
3245309440,3245309951,UA
3245309952,3245311999,CZ
-3245312000,3245314047,GB
+3245312000,3245314047,DE
3245314048,3245315071,PL
3245315072,3245316095,IT
3245316096,3245317119,SE
@@ -51917,12 +52031,10 @@
3245998080,3246129151,GB
3246129152,3246260223,RU
3246260224,3246325759,PT
-3246325760,3246326015,EU
-3246326016,3246326527,ES
-3246326528,3246351615,EU
+3246325760,3246351615,EU
3246351616,3246352639,ES
-3246352640,3246378495,EU
-3246378496,3246379007,ES
+3246352640,3246378751,EU
+3246378752,3246379007,ES
3246379008,3246381055,GB
3246381056,3246381567,EU
3246381568,3246381823,ES
@@ -52037,21 +52149,39 @@
3247111168,3247112191,DE
3247112192,3247177727,FR
3247177728,3247243263,TR
-3247243264,3247252863,DE
+3247243264,3247247432,DE
+3247247433,3247247440,NL
+3247247441,3247252863,DE
3247252864,3247252871,NL
3247252872,3247255295,DE
3247255296,3247255551,NL
-3247255552,3247277055,DE
+3247255552,3247265791,DE
+3247265792,3247266047,NL
+3247266048,3247276287,DE
+3247276288,3247276543,NL
+3247276544,3247277055,DE
3247277056,3247277311,NL
3247277312,3247278479,DE
3247278480,3247278487,NL
3247278488,3247278535,DE
3247278536,3247278543,NL
-3247278544,3247286783,DE
+3247278544,3247281303,DE
+3247281304,3247281311,NL
+3247281312,3247282345,DE
+3247282346,3247282353,NL
+3247282354,3247282679,DE
+3247282680,3247282687,NL
+3247282688,3247286104,DE
+3247286105,3247286105,NL
+3247286106,3247286783,DE
3247286784,3247287039,NL
3247287040,3247299363,DE
3247299364,3247299364,EU
-3247299365,3247308799,DE
+3247299365,3247302833,DE
+3247302834,3247302834,NL
+3247302835,3247306143,DE
+3247306144,3247306151,NL
+3247306152,3247308799,DE
3247308800,3247309055,BG
3247309056,3247313663,FI
3247313664,3247313919,AM
@@ -52170,15 +52300,10 @@
3247794439,3247794439,EU
3247794440,3247800319,FR
3247800320,3247816703,DK
-3247816704,3247817727,EU
-3247817728,3247820799,BE
-3247820800,3247822335,CH
-3247822336,3247822847,DE
-3247822848,3247823359,EU
-3247823360,3247823871,AT
-3247823872,3247825407,EU
-3247825408,3247825919,CH
-3247825920,3247826943,BE
+3247816704,3247818751,EU
+3247818752,3247820799,BE
+3247820800,3247821823,CH
+3247821824,3247826943,EU
3247826944,3247828991,CH
3247828992,3247833087,BE
3247833088,3247833599,RU
@@ -52356,7 +52481,6 @@
3248788480,3248788735,FR
3248788736,3248788991,UA
3248788992,3248789503,FR
-3248789504,3248789759,RO
3248789760,3248790015,FR
3248790016,3248790271,DE
3248790272,3248790527,DK
@@ -52364,9 +52488,15 @@
3248790784,3248791039,PL
3248791040,3248791295,BE
3248791296,3248791551,DE
-3248791552,3248792319,EU
+3248791552,3248792063,GB
+3248792064,3248792319,EU
3248792320,3248792575,GB
-3248792576,3248799743,EU
+3248792576,3248796607,EU
+3248796608,3248796863,GB
+3248796864,3248798975,EU
+3248798976,3248799231,GB
+3248799232,3248799735,EU
+3248799736,3248799743,GB
3248799744,3248800255,NL
3248800256,3248800767,RU
3248800768,3248801279,FR
@@ -52375,7 +52505,7 @@
3248802304,3248802815,FR
3248802816,3248803327,RU
3248803328,3248804351,GB
-3248804352,3248804863,EU
+3248804352,3248804863,LV
3248804864,3248805375,DE
3248805376,3248805887,RU
3248805888,3248806399,NL
@@ -52632,46 +52762,30 @@
3249868800,3249869823,NL
3249869824,3249871359,SE
3249871360,3249871615,US
-3249871616,3249910271,SE
-3249910272,3249910783,NL
-3249910784,3249912319,GB
-3249912320,3249926655,SE
+3249871616,3249910783,SE
+3249910784,3249911807,GB
+3249911808,3249926655,SE
3249926656,3249926911,AU
-3249926912,3249931263,SE
-3249931264,3249931775,NL
-3249931776,3249932287,SE
+3249926912,3249932287,SE
3249932288,3249934335,US
-3249934336,3249935871,SE
-3249935872,3249936383,DE
-3249936384,3249968127,SE
+3249934336,3249968127,SE
3249968128,3249969151,FR
-3249969152,3250012159,SE
+3249969152,3249972479,SE
+3249972480,3249972735,DE
+3249972736,3250012159,SE
3250012160,3250013183,DE
-3250013184,3250014207,SE
-3250014208,3250014719,DE
-3250014720,3250015231,SE
-3250015232,3250015743,FI
-3250015744,3250015999,SE
+3250013184,3250015999,SE
3250016000,3250016127,DK
-3250016128,3250016767,SE
-3250016768,3250017279,NL
-3250017280,3250017791,SE
-3250017792,3250018303,DE
-3250018304,3250018815,FR
-3250018816,3250020863,SE
+3250016128,3250020863,SE
3250020864,3250021375,IT
3250021376,3250022399,FR
-3250022400,3250022911,SE
-3250022912,3250023423,FR
+3250022400,3250023423,SE
3250023424,3250024447,DE
3250024448,3250026495,SE
3250026496,3250027519,FR
3250027520,3250032639,SE
3250032640,3250032895,AP
-3250032896,3250039295,SE
-3250039296,3250039807,DK
-3250039808,3250040319,GB
-3250040320,3250061311,SE
+3250032896,3250061311,SE
3250061312,3250192383,FI
3250192384,3250192639,AT
3250192640,3250192895,RU
@@ -53251,7 +53365,9 @@
3251252736,3251256831,CH
3251256832,3251257343,GB
3251257344,3251259903,BE
-3251259904,3251261439,FR
+3251259904,3251260159,FR
+3251260160,3251260671,EU
+3251260672,3251261439,FR
3251261440,3251264255,CH
3251264256,3251265535,FR
3251265536,3251267839,NL
@@ -53262,8 +53378,7 @@
3251269120,3251269215,DK
3251269216,3251269270,NL
3251269271,3251269271,DK
-3251269272,3251269727,NL
-3251269728,3251269887,DE
+3251269272,3251269759,NL
3251269888,3251270143,GB
3251270144,3251270399,PL
3251270400,3251270655,NO
@@ -53346,38 +53461,31 @@
3251806208,3251810047,BE
3251810048,3251812607,FI
3251812608,3251814143,BE
-3251814144,3251814655,FI
-3251814656,3251815167,BE
-3251815168,3251815679,LU
+3251814144,3251815679,FI
3251815680,3251817471,BE
-3251817472,3251817983,FI
-3251817984,3251818495,BE
-3251818496,3251896319,FI
+3251817472,3251896319,FI
3251896320,3252166655,NO
3252166656,3252167679,SE
3252167680,3252176127,NL
-3252176128,3252176383,SE
-3252176384,3252176895,HR
-3252176896,3252177151,SE
-3252177152,3252178943,HR
+3252176128,3252177919,SE
+3252177920,3252178943,HR
3252178944,3252179455,SE
3252179456,3252189183,NL
-3252189184,3252189695,NO
-3252189696,3252190719,SE
+3252189184,3252190719,SE
3252190720,3252190975,NO
3252190976,3252191231,SE
-3252191232,3252197119,HR
-3252197120,3252197375,SE
-3252197376,3252203519,HR
-3252203520,3252205823,SE
+3252191232,3252196351,HR
+3252196352,3252197375,SE
+3252197376,3252202495,HR
+3252202496,3252203007,SE
+3252203008,3252205567,HR
+3252205568,3252205823,SE
3252205824,3252206079,NO
3252206080,3252207615,SE
3252207616,3252211711,NL
3252211712,3252213759,SE
3252213760,3252214527,NO
-3252214528,3252221439,SE
-3252221440,3252222463,HR
-3252222464,3252223999,SE
+3252214528,3252223999,SE
3252224000,3252232191,NL
3252232192,3252233215,SE
3252233216,3252234239,NO
@@ -53387,10 +53495,11 @@
3252248576,3252256767,NL
3252256768,3252273151,NO
3252273152,3252276223,SE
-3252276224,3252277759,NO
-3252277760,3252279295,HR
-3252279296,3252279807,NO
-3252279808,3252286463,HR
+3252276224,3252277247,NO
+3252277248,3252278271,SE
+3252278272,3252279295,HR
+3252279296,3252280319,SE
+3252280320,3252286463,HR
3252286464,3252289535,SE
3252289536,3252289791,BG
3252289792,3252291327,GR
@@ -53444,7 +53553,9 @@
3252346368,3252346623,GB
3252346624,3252355071,GR
3252355072,3252355327,GB
-3252355328,3252358911,LT
+3252355328,3252356351,LT
+3252356352,3252356863,EU
+3252356864,3252358911,LT
3252358912,3252359167,DE
3252359168,3252362239,DK
3252362240,3252362495,PL
@@ -53482,8 +53593,8 @@
3252387328,3252387583,PL
3252387584,3252387839,RU
3252387840,3252404223,LT
-3252404224,3252406271,NO
-3252406272,3252410758,LT
+3252404224,3252405759,NO
+3252405760,3252410758,LT
3252410759,3252410759,SL
3252410760,3252411903,LT
3252411904,3252411967,GN
@@ -53491,23 +53602,13 @@
3252415488,3252415743,US
3252415744,3252421631,LT
3252421632,3252423679,NO
-3252423680,3252436991,LT
-3252436992,3252437503,NG
-3252437504,3252447231,LT
-3252447232,3252447743,NO
-3252447744,3252448767,LT
-3252448768,3252449279,SE
-3252449280,3252449791,LT
+3252423680,3252449791,LT
3252449792,3252450047,DK
3252450048,3252452543,LT
3252452544,3252452551,SS
3252452552,3252455679,LT
3252455680,3252455807,BI
-3252455808,3252456447,LT
-3252456448,3252456959,BJ
-3252456960,3252461055,LT
-3252461056,3252461567,NO
-3252461568,3252469759,LT
+3252455808,3252469759,LT
3252469760,3252473855,NL
3252473856,3252486143,LT
3252486144,3252490239,BE
@@ -53537,7 +53638,6 @@
3252516864,3252517119,FR
3252517120,3252517375,EU
3252517376,3252517631,PL
-3252517632,3252517887,BE
3252517888,3252518143,DK
3252518144,3252518399,NL
3252518400,3252518655,PL
@@ -53661,7 +53761,7 @@
3252937728,3252938239,FR
3252938240,3252938751,UA
3252938752,3252939263,RU
-3252939264,3252939775,EU
+3252939264,3252939775,DE
3252939776,3252940287,RO
3252940288,3252940799,PT
3252940800,3252941311,RU
@@ -53700,28 +53800,22 @@
3253005056,3253010431,AT
3253010432,3253075967,FI
3253075968,3253207039,RO
-3253207040,3253265407,RU
-3253265408,3253265919,AM
-3253265920,3253270527,RU
+3253207040,3253270527,RU
3253270528,3253271551,BY
3253271552,3253338111,RU
3253338112,3253401343,SE
3253401344,3253401599,EU
3253401600,3253405563,SE
3253405564,3253405564,EU
-3253405565,3253409279,SE
-3253409280,3253409791,AT
-3253409792,3253430783,SE
+3253405565,3253430783,SE
3253430784,3253431039,BE
-3253431040,3253454335,SE
+3253431040,3253441023,SE
+3253441024,3253441535,AT
+3253441536,3253454335,SE
3253454336,3253454591,EU
-3253454592,3253454847,SE
-3253454848,3253455359,NL
-3253455360,3253463039,SE
+3253454592,3253463039,SE
3253463040,3253464063,GB
-3253464064,3253464575,SE
-3253464576,3253465087,NL
-3253465088,3253469183,SE
+3253464064,3253469183,SE
3253469184,3253471231,AO
3253471232,3253534719,PT
3253534720,3253600255,GB
@@ -53929,7 +54023,7 @@
3253901824,3253902079,SI
3253902080,3253902335,DK
3253902336,3253904383,UA
-3253904384,3253904895,ES
+3253904384,3253904895,GB
3253904896,3253905151,UA
3253905152,3253905407,RU
3253905408,3253905919,PL
@@ -53955,7 +54049,7 @@
3253917184,3253917439,CY
3253917440,3253917695,PL
3253917696,3253918207,RU
-3253918208,3253918719,DE
+3253918208,3253918719,CH
3253918720,3253919743,IL
3253919744,3253923839,GB
3253923840,3253927935,GR
@@ -54004,9 +54098,7 @@
3254489488,3254489503,MR
3254489504,3254491903,FR
3254491904,3254492031,CM
-3254492032,3254492159,FR
-3254492160,3254492607,LB
-3254492608,3254493183,FR
+3254492032,3254493183,FR
3254493184,3254493253,GP
3254493254,3254493311,FR
3254493312,3254493323,GP
@@ -54018,17 +54110,11 @@
3254494208,3254494527,GP
3254494528,3254495055,FR
3254495056,3254495063,DJ
-3254495064,3254496767,FR
-3254496768,3254497247,DZ
-3254497248,3254508031,FR
-3254508032,3254508543,GQ
-3254508544,3254508799,FR
+3254495064,3254508799,FR
3254508800,3254508831,MQ
3254508832,3254521855,FR
-3254521856,3254522143,GB
-3254522144,3254552319,FR
-3254552320,3254552831,IR
-3254552832,3254607871,FR
+3254521856,3254522111,GB
+3254522112,3254607871,FR
3254607872,3254608895,RE
3254608896,3254609151,FR
3254609152,3254610687,RE
@@ -54047,9 +54133,7 @@
3254615552,3254615552,YT
3254615553,3254615807,FR
3254615808,3254615808,YT
-3254615809,3254623743,FR
-3254623744,3254624255,US
-3254624256,3254648831,FR
+3254615809,3254648831,FR
3254648832,3254648895,DK
3254648896,3254649087,GB
3254649088,3254649855,AL
@@ -54251,7 +54335,6 @@
3254841344,3254841599,PL
3254841600,3254841855,IE
3254841856,3254842111,LV
-3254842112,3254842367,GB
3254842368,3254842623,PL
3254842624,3254842879,RU
3254842880,3254843135,SE
@@ -54344,18 +54427,64 @@
3255172352,3255172607,DE
3255172608,3255173119,FR
3255173120,3255173631,SH
-3255173632,3255174143,EU
-3255174144,3255174399,GB
-3255174400,3255176191,EU
+3255173632,3255173647,EU
+3255173648,3255173711,GB
+3255173712,3255173759,EU
+3255173760,3255173823,GB
+3255173824,3255173839,EU
+3255173840,3255175167,GB
+3255175168,3255175199,EU
+3255175200,3255175231,GB
+3255175232,3255175247,EU
+3255175248,3255175263,GB
+3255175264,3255175279,EU
+3255175280,3255175295,GB
+3255175296,3255175311,EU
+3255175312,3255175327,GB
+3255175328,3255175431,EU
+3255175432,3255175447,GB
+3255175448,3255175455,EU
+3255175456,3255175503,GB
+3255175504,3255175511,EU
+3255175512,3255175535,GB
+3255175536,3255175551,EU
+3255175552,3255175559,GB
+3255175560,3255175591,EU
+3255175592,3255175607,GB
+3255175608,3255175679,EU
+3255175680,3255175935,GB
+3255175936,3255176191,EU
3255176192,3255177215,GB
-3255177216,3255189759,EU
-3255189760,3255191807,GB
-3255191808,3255195391,EU
-3255195392,3255195903,GB
-3255195904,3255196927,EU
-3255196928,3255197439,GB
-3255197440,3255197695,EU
-3255197696,3255205887,GB
+3255177216,3255177471,EU
+3255177472,3255177855,GB
+3255177856,3255177983,EU
+3255177984,3255187199,GB
+3255187200,3255187455,DE
+3255187456,3255187711,GB
+3255187712,3255188479,EU
+3255188480,3255191807,GB
+3255191808,3255192319,EU
+3255192320,3255193863,GB
+3255193864,3255193887,EU
+3255193888,3255193959,GB
+3255193960,3255193967,EU
+3255193968,3255193975,GB
+3255193976,3255193983,GI
+3255193984,3255193999,GB
+3255194000,3255194015,EU
+3255194016,3255194039,GB
+3255194040,3255194055,EU
+3255194056,3255194063,GB
+3255194064,3255194071,EU
+3255194072,3255194431,GB
+3255194432,3255194495,EU
+3255194496,3255194559,GB
+3255194560,3255194623,EU
+3255194624,3255194703,GB
+3255194704,3255194719,EU
+3255194720,3255194815,GB
+3255194816,3255194879,EU
+3255194880,3255205887,GB
3255205888,3255214079,FR
3255214080,3255222271,CH
3255222272,3255223295,DE
@@ -54511,7 +54640,6 @@
3255412736,3255413247,DE
3255413248,3255413503,LV
3255413504,3255413759,UZ
-3255413760,3255414271,GB
3255414272,3255414527,TR
3255414528,3255414783,LV
3255414784,3255415807,BE
@@ -54529,28 +54657,17 @@
3255434466,3255434720,GB
3255434721,3255434721,EU
3255434722,3255436287,GB
-3255436288,3255449599,EU
-3255449600,3255450111,BE
-3255450112,3255450623,EU
-3255450624,3255451135,DE
-3255451136,3255452671,FR
-3255452672,3255468031,EU
-3255468032,3255468543,GB
-3255468544,3255470079,EU
-3255470080,3255470591,AT
-3255470592,3255474175,EU
-3255474176,3255476735,GB
-3255476736,3255483391,EU
+3255436288,3255451647,EU
+3255451648,3255452671,FR
+3255452672,3255474175,EU
+3255474176,3255476223,GB
+3255476224,3255483391,EU
3255483392,3255484415,DE
3255484416,3255485439,EU
3255485440,3255486463,FR
-3255486464,3255486975,EU
-3255486976,3255487487,GB
-3255487488,3255488511,EU
+3255486464,3255488511,EU
3255488512,3255489535,AT
-3255489536,3255490047,EU
-3255490048,3255490559,DE
-3255490560,3255492607,EU
+3255489536,3255492607,EU
3255492608,3255496703,GB
3255496704,3255498751,EU
3255498752,3255500799,FR
@@ -54561,7 +54678,6 @@
3255506432,3255506687,PL
3255506688,3255506943,PT
3255506944,3255507199,PL
-3255507200,3255507455,PT
3255507456,3255507711,FR
3255507712,3255507967,AT
3255507968,3255508223,UA
@@ -54594,24 +54710,18 @@
3255660544,3255666431,NL
3255666432,3255666687,DE
3255666688,3255697407,NL
-3255697408,3255704575,SE
-3255704576,3255705087,FR
-3255705088,3255716351,SE
-3255716352,3255716863,CH
-3255716864,3255743231,SE
+3255697408,3255743231,SE
3255743232,3255743487,IT
3255743488,3255743743,SE
3255743744,3255743999,US
3255744000,3255745535,SE
-3255745536,3255746047,DK
-3255746048,3255762431,SE
-3255762432,3255762943,BE
+3255745536,3255745791,DK
+3255745792,3255762943,SE
3255762944,3255791615,DE
3255791616,3255792639,UA
3255792640,3255793663,RU
3255793664,3255794943,PL
-3255794944,3255795199,RU
-3255795200,3255795711,UA
+3255794944,3255795711,RU
3255795712,3255799039,DE
3255799040,3255799295,SE
3255799296,3255800575,DE
@@ -54630,9 +54740,7 @@
3256025088,3256057855,NO
3256057856,3256082431,DK
3256082432,3256090623,LV
-3256090624,3256164863,IT
-3256164864,3256165375,SE
-3256165376,3256221695,IT
+3256090624,3256221695,IT
3256221696,3256223743,SE
3256223744,3256225791,NL
3256225792,3256229887,SE
@@ -54744,9 +54852,7 @@
3256693760,3256694783,IT
3256694784,3256695807,DE
3256695808,3256696831,UA
-3256696832,3256697087,BE
-3256697088,3256697855,EU
-3256697856,3256698367,IT
+3256696832,3256698367,EU
3256698368,3256698623,NL
3256698624,3256698879,GB
3256698880,3256701439,EU
@@ -54756,12 +54862,9 @@
3256705280,3256705535,EU
3256705536,3256705791,BE
3256705792,3256706047,AT
-3256706048,3256706559,GR
-3256706560,3256709631,EU
+3256706048,3256709631,EU
3256709632,3256709887,AT
-3256709888,3256710143,EU
-3256710144,3256710655,AT
-3256710656,3256711167,SE
+3256709888,3256711167,EU
3256711168,3256711423,DE
3256711424,3256713215,EU
3256713216,3256727551,PL
@@ -54785,7 +54888,6 @@
3256787456,3256787711,DE
3256787712,3256787967,UA
3256787968,3256788223,PL
-3256788224,3256788479,RU
3256788480,3256788735,GB
3256788736,3256788991,DE
3256788992,3256789247,RO
@@ -54895,7 +54997,9 @@
3256991488,3256991743,RU
3256991744,3257011199,GB
3257011200,3257011455,BG
-3257011456,3257058815,GB
+3257011456,3257024511,GB
+3257024512,3257032703,JP
+3257032704,3257058815,GB
3257058816,3257059071,PL
3257059072,3257092607,GB
3257092608,3257092863,RO
@@ -54938,9 +55042,7 @@
3257357824,3257371903,DE
3257371904,3257372159,EU
3257372160,3257372671,GB
-3257372672,3257383679,DE
-3257383680,3257383935,CH
-3257383936,3257388799,DE
+3257372672,3257388799,DE
3257388800,3257389055,FR
3257389056,3257391615,DE
3257391616,3257391871,EU
@@ -55012,9 +55114,7 @@
3257564672,3257565183,RO
3257565184,3257573375,CY
3257573376,3257574015,CH
-3257574016,3257574911,EU
-3257574912,3257575423,BE
-3257575424,3257576447,EU
+3257574016,3257576447,EU
3257576448,3257577471,AT
3257577472,3257581567,DE
3257581568,3257585663,UA
@@ -55031,28 +55131,54 @@
3257663488,3257729023,UA
3257729024,3257731295,DE
3257731296,3257731327,NL
-3257731328,3257750783,DE
+3257731328,3257745599,DE
+3257745600,3257745608,NL
+3257745609,3257745639,DE
+3257745640,3257745647,NL
+3257745648,3257750783,DE
3257750784,3257751039,NL
-3257751040,3257762303,DE
+3257751040,3257751679,DE
+3257751680,3257751687,NL
+3257751688,3257757135,DE
+3257757136,3257757136,NL
+3257757137,3257757139,DE
+3257757140,3257757140,NL
+3257757141,3257758895,DE
+3257758896,3257758903,NL
+3257758904,3257762303,DE
3257762304,3257762559,NL
3257762560,3257769727,DE
3257769728,3257769983,NL
-3257769984,3257778175,DE
+3257769984,3257774911,DE
+3257774912,3257774919,NL
+3257774920,3257778175,DE
3257778176,3257778431,NL
-3257778432,3257790567,DE
+3257778432,3257778791,DE
+3257778792,3257778799,NL
+3257778800,3257781090,DE
+3257781091,3257781091,NL
+3257781092,3257781495,DE
+3257781496,3257781503,NL
+3257781504,3257784831,DE
+3257784832,3257785087,NL
+3257785088,3257786397,DE
+3257786398,3257786398,NL
+3257786399,3257786466,DE
+3257786467,3257786467,NL
+3257786468,3257787577,DE
+3257787578,3257787578,NL
+3257787579,3257790567,DE
3257790568,3257790575,NL
-3257790576,3257793719,DE
-3257793720,3257793727,NL
-3257793728,3257794047,DE
+3257790576,3257791943,DE
+3257791944,3257791951,NL
+3257791952,3257794047,DE
3257794048,3257794303,NL
3257794304,3257794559,DE
-3257794560,3257827327,GB
-3257827328,3257827839,IE
-3257827840,3257829375,GB
+3257794560,3257829375,GB
3257829376,3257830399,IE
3257830400,3257835519,GB
-3257835520,3257844223,IE
-3257844224,3257844735,GB
+3257835520,3257843711,IE
+3257843712,3257844735,GB
3257844736,3257860095,IE
3257860096,3257925631,SE
3257925632,3257925887,AT
@@ -55113,7 +55239,6 @@
3258067968,3258068223,RO
3258068224,3258068479,CH
3258068736,3258068991,DE
-3258068992,3258069247,NL
3258069248,3258069503,PL
3258069504,3258069759,RO
3258069760,3258070015,UA
@@ -55139,7 +55264,6 @@
3258076928,3258077183,UA
3258077184,3258077439,GB
3258077440,3258077695,UA
-3258077696,3258077951,NL
3258077952,3258078207,PL
3258078208,3258078463,TR
3258078464,3258078719,UA
@@ -55218,7 +55342,6 @@
3258103040,3258103295,SE
3258103296,3258103551,DE
3258103552,3258103807,AE
-3258103808,3258104063,SE
3258104064,3258104319,GB
3258104320,3258104575,PL
3258104576,3258104831,DE
@@ -55381,16 +55504,11 @@
3258974208,3259039743,DE
3259039744,3259105279,PT
3259105280,3259170815,GB
-3259170816,3259219967,RU
-3259219968,3259220479,BY
-3259220480,3259223295,RU
-3259223296,3259223807,TM
+3259170816,3259223807,RU
3259223808,3259224831,KZ
-3259224832,3259225343,TJ
+3259224832,3259225343,RU
3259225344,3259226111,AZ
-3259226112,3259226623,UZ
-3259226624,3259227135,AM
-3259227136,3259236351,RU
+3259226112,3259236351,RU
3259236352,3259236863,SE
3259236864,3259237119,CH
3259237120,3259240447,SE
@@ -55400,15 +55518,15 @@
3259243520,3259244543,US
3259244544,3259246591,SE
3259246592,3259247615,IT
-3259247616,3259250175,SE
+3259247616,3259248895,SE
+3259248896,3259249151,GB
+3259249152,3259250175,SE
3259250176,3259250687,AT
3259250688,3259250722,SE
3259250723,3259250723,EU
3259250724,3259252479,SE
3259252480,3259252735,EU
-3259252736,3259265023,SE
-3259265024,3259265535,DE
-3259265536,3259281407,SE
+3259252736,3259281407,SE
3259281408,3259282431,US
3259282432,3259301887,SE
3259301888,3259302143,DE
@@ -55416,11 +55534,7 @@
3259302400,3259303423,CH
3259303424,3259305983,SE
3259305984,3259310079,NL
-3259310080,3259311103,EU
-3259311104,3259311615,DE
-3259311616,3259312639,EU
-3259312640,3259313151,GB
-3259313152,3259317247,EU
+3259310080,3259317247,EU
3259317248,3259318271,CH
3259318272,3259334655,GB
3259334656,3259338751,DE
@@ -55444,44 +55558,20 @@
3259367424,3259432959,GB
3259432960,3259435263,SE
3259435264,3259435519,IT
-3259435520,3259438591,SE
-3259438592,3259439103,NO
-3259439104,3259454719,SE
+3259435520,3259454719,SE
3259454720,3259454975,EU
3259454976,3259458559,SE
3259458560,3259459583,CZ
3259459584,3259470847,SE
3259470848,3259471871,US
-3259471872,3259484671,SE
-3259484672,3259485183,ES
+3259471872,3259485183,SE
3259485184,3259485695,AT
3259485696,3259491327,SE
3259491328,3259492351,CZ
-3259492352,3259495935,SE
-3259495936,3259496447,DK
-3259496448,3259498495,SE
-3259498496,3259521023,GB
-3259521024,3259521535,NL
-3259521536,3259541503,GB
+3259492352,3259498495,SE
+3259498496,3259541503,GB
3259541504,3259543551,NL
-3259543552,3259545599,GB
-3259545600,3259546111,LB
-3259546112,3259581439,GB
-3259581440,3259581951,ES
-3259581952,3259587583,GB
-3259587584,3259588095,ES
-3259588096,3259588607,IT
-3259588608,3259628031,GB
-3259628032,3259628543,CH
-3259628544,3259640831,GB
-3259640832,3259641343,ES
-3259641344,3259650047,GB
-3259650048,3259650559,NL
-3259650560,3259651071,GB
-3259651072,3259652095,NL
-3259652096,3259701759,GB
-3259701760,3259702271,DE
-3259702272,3259760639,GB
+3259543552,3259760639,GB
3259760640,3259814399,DE
3259814400,3259814655,AT
3259814656,3259821823,DE
@@ -55508,7 +55598,6 @@
3259966464,3259967487,DE
3259967488,3259968511,RS
3259968512,3259969535,RU
-3259969536,3259970559,FR
3259970560,3259971583,CZ
3259971584,3259972607,IT
3259972608,3259973631,UA
@@ -55525,8 +55614,7 @@
3260021760,3260022271,GR
3260022272,3260022783,NL
3260022784,3260284927,GB
-3260284928,3260415487,RU
-3260415488,3260415999,BY
+3260284928,3260415999,RU
3260416000,3260481535,FI
3260481536,3260547071,RU
3260547072,3260547327,DE
@@ -55800,7 +55888,6 @@
3262041600,3262041855,DK
3262041856,3262042367,FR
3262042368,3262042623,GB
-3262042624,3262042879,UA
3262042880,3262043135,NL
3262043136,3262043391,RO
3262043392,3262043647,TR
@@ -55834,11 +55921,56 @@
3262119936,3262124031,AX
3262124032,3262128127,DE
3262128128,3262136319,GB
-3262136320,3262139391,EU
+3262136320,3262137599,EU
+3262137600,3262137855,DE
+3262137856,3262139391,EU
3262139392,3262140415,GB
-3262140416,3262141439,EU
+3262140416,3262140671,DE
+3262140672,3262141183,EU
+3262141184,3262141439,DE
3262141440,3262142463,ES
-3262142464,3262152703,EU
+3262142464,3262142719,DE
+3262142720,3262143487,EU
+3262143488,3262143743,GB
+3262143744,3262143999,EU
+3262144000,3262144047,DE
+3262144048,3262145023,EU
+3262145024,3262145279,DE
+3262145280,3262145551,EU
+3262145552,3262145567,DE
+3262145568,3262145615,EU
+3262145616,3262145631,DE
+3262145632,3262145663,EU
+3262145664,3262145791,DE
+3262145792,3262146047,GB
+3262146048,3262146815,DE
+3262146816,3262147583,EU
+3262147584,3262147839,DE
+3262147840,3262148607,EU
+3262148608,3262148863,DE
+3262148864,3262148879,EU
+3262148880,3262148919,DE
+3262148920,3262148927,EU
+3262148928,3262149119,DE
+3262149120,3262149151,FR
+3262149152,3262149159,DE
+3262149160,3262149167,EU
+3262149168,3262149375,FR
+3262149376,3262149631,EU
+3262149632,3262149887,DE
+3262149888,3262150911,EU
+3262150912,3262151047,DE
+3262151048,3262151071,EU
+3262151072,3262151103,DE
+3262151104,3262151135,EU
+3262151136,3262151151,DE
+3262151152,3262151167,EU
+3262151168,3262151423,DE
+3262151424,3262151935,EU
+3262151936,3262152191,DE
+3262152192,3262152663,EU
+3262152664,3262152671,DE
+3262152672,3262152703,EU
3262152704,3262185471,AT
3262185472,3262200575,DE
3262200576,3262200831,EU
@@ -55878,7 +56010,6 @@
3262425088,3262425343,GR
3262425344,3262425599,RU
3262425600,3262426111,UA
-3262426112,3262426623,DE
3262426624,3262427135,GB
3262427136,3262427647,FR
3262427648,3262428159,DK
@@ -55931,7 +56062,9 @@
3262461824,3262461951,RO
3262461952,3262463999,IQ
3262464000,3262472191,RU
-3262472192,3262473476,DE
+3262472192,3262472735,DE
+3262472736,3262472739,IT
+3262472740,3262473476,DE
3262473477,3262473477,US
3262473478,3262473732,DE
3262473733,3262473733,US
@@ -55939,13 +56072,9 @@
3262473753,3262473753,US
3262473754,3262474043,DE
3262474044,3262474044,GB
-3262474045,3262474051,DE
-3262474052,3262474052,SG
-3262474053,3262474183,DE
+3262474045,3262474183,DE
3262474184,3262474184,SG
-3262474185,3262474204,DE
-3262474205,3262474205,SG
-3262474206,3262474236,DE
+3262474185,3262474236,DE
3262474237,3262474237,SG
3262474238,3262474347,DE
3262474348,3262474351,AU
@@ -55985,7 +56114,8 @@
3262480283,3262480283,GB
3262480284,3262480316,DE
3262480317,3262480317,NL
-3262480318,3262480383,DE
+3262480318,3262480318,IT
+3262480319,3262480383,DE
3262480384,3262488575,GB
3262488576,3262496767,SE
3262496768,3262504959,FR
@@ -55999,7 +56129,6 @@
3262509568,3262510079,RO
3262510080,3262511103,FR
3262511104,3262511615,GB
-3262511616,3262512127,DE
3262512128,3262512639,UA
3262512640,3262513151,DE
3262513152,3262578687,AT
@@ -56009,16 +56138,15 @@
3262636032,3262644223,BE
3262644224,3262648319,NL
3262648320,3262648575,EU
-3262648576,3262648831,DE
-3262648832,3262649855,NL
+3262648576,3262649855,NL
3262649856,3262650111,DE
3262650112,3262664703,NL
3262664704,3262665727,DE
3262665728,3262665983,EU
3262665984,3262666751,DE
3262666752,3262667007,EU
-3262667008,3262671359,DE
-3262671360,3262690815,NL
+3262667008,3262670847,DE
+3262670848,3262690815,NL
3262690816,3262691583,DE
3262691584,3262693375,NL
3262693376,3262701567,DE
@@ -56030,19 +56158,15 @@
3262722560,3262722815,DE
3262722816,3262724863,NL
3262724864,3262725119,DE
-3262725120,3262725631,NL
-3262725632,3262726143,DE
-3262726144,3262732799,NL
+3262725120,3262732799,NL
3262732800,3262733055,DE
-3262733056,3262736383,NL
-3262736384,3262736895,DE
-3262736896,3262753791,NL
+3262733056,3262753791,NL
3262753792,3262754815,DE
3262754816,3262832639,NL
3262832640,3262840319,DE
3262840320,3262906367,NL
3262906368,3262964991,CH
-3262964992,3262965247,GB
+3262964992,3262965247,DE
3262965248,3262971903,CH
3262971904,3263029247,IE
3263029248,3263030271,UA
@@ -56053,7 +56177,6 @@
3263033856,3263034367,IT
3263034368,3263034879,UA
3263034880,3263035391,GB
-3263035392,3263035903,UA
3263035904,3263036415,CH
3263036416,3263036927,GR
3263036928,3263037439,RU
@@ -56147,17 +56270,9 @@
3263138552,3263138815,AT
3263138816,3263168511,DE
3263168512,3263430655,GB
-3263430656,3263436799,SE
-3263436800,3263437311,GB
-3263437312,3263443455,SE
-3263443456,3263443967,NL
-3263443968,3263446527,SE
-3263446528,3263447039,DE
-3263447040,3263458815,SE
-3263458816,3263459327,FR
-3263459328,3263467519,SE
-3263467520,3263468031,IT
-3263468032,3263469567,SE
+3263430656,3263432703,SE
+3263432704,3263433215,AT
+3263433216,3263469567,SE
3263469568,3263470591,SG
3263470592,3263475711,SE
3263475712,3263476735,JP
@@ -56179,9 +56294,7 @@
3263526144,3263561727,EU
3263561728,3263627263,NL
3263627264,3263692799,RU
-3263692800,3263764991,FI
-3263764992,3263765503,BE
-3263765504,3263823871,FI
+3263692800,3263823871,FI
3263823872,3263826943,DE
3263826944,3263827199,AT
3263827200,3263833903,DE
@@ -56295,8 +56408,7 @@
3264334336,3264334847,UA
3264334848,3264335359,PL
3264335360,3264335871,SK
-3264335872,3264336383,NL
-3264336384,3264336895,GB
+3264335872,3264336895,GB
3264336896,3264337407,RU
3264337408,3264338431,UA
3264338432,3264338943,DE
@@ -56319,9 +56431,7 @@
3264345088,3264346111,NL
3264346112,3264347135,SE
3264347136,3264348159,DE
-3264348160,3264372223,FR
-3264372224,3264372735,GB
-3264372736,3264375039,FR
+3264348160,3264375039,FR
3264375040,3264376063,SE
3264376064,3264376319,HR
3264376320,3264376575,UA
@@ -56392,7 +56502,6 @@
3264564224,3264565247,IE
3264565248,3264567295,NL
3264567296,3264567551,PL
-3264567552,3264567807,GB
3264567808,3264568063,RU
3264568320,3264568575,UA
3264568832,3264569087,FR
@@ -56421,8 +56530,8 @@
3264613905,3264613905,NL
3264613906,3264614911,GB
3264614912,3264615167,SE
-3264615168,3264618239,GB
-3264618240,3264618495,US
+3264615168,3264617983,GB
+3264617984,3264618495,US
3264618496,3264621823,GB
3264621824,3264622079,DE
3264622080,3264624639,GB
@@ -56445,7 +56554,7 @@
3264651776,3264652287,IT
3264652288,3264652799,RU
3264652800,3264653311,PL
-3264653312,3264653823,EU
+3264653312,3264653823,DE
3264653824,3264654335,PL
3264654336,3264654847,DE
3264654848,3264655359,UA
@@ -56625,7 +56734,9 @@
3265140000,3265140015,BE
3265140016,3265141135,CH
3265141136,3265141151,GB
-3265141152,3265141759,CH
+3265141152,3265141553,CH
+3265141554,3265141557,IE
+3265141558,3265141759,CH
3265141760,3265141767,GB
3265141768,3265141791,CH
3265141792,3265141887,GB
@@ -56637,64 +56748,40 @@
3265175552,3265183743,NL
3265183744,3265191935,BY
3265191936,3265200127,CH
-3265200128,3265218559,GB
-3265218560,3265219071,NL
-3265219072,3265265663,GB
+3265200128,3265265663,GB
3265265664,3265331199,SK
-3265331200,3265334783,GB
-3265334784,3265335807,EU
-3265335808,3265337343,GB
-3265337344,3265337855,EU
-3265337856,3265340415,GB
-3265340416,3265341951,EU
-3265341952,3265343487,GB
-3265343488,3265343999,DE
-3265344000,3265344511,EU
-3265344512,3265345023,DE
-3265345024,3265345535,EU
+3265331200,3265334271,GB
+3265334272,3265336319,EU
+3265336320,3265337343,GB
+3265337344,3265338367,EU
+3265338368,3265340415,GB
+3265340416,3265342463,EU
+3265342464,3265343487,GB
+3265343488,3265345535,EU
3265345536,3265347583,DE
-3265347584,3265349119,FR
-3265349120,3265349631,EU
-3265349632,3265352191,FR
-3265352192,3265353215,EU
-3265353216,3265353727,DE
-3265353728,3265354751,EU
-3265354752,3265355263,DE
-3265355264,3265355775,FR
-3265355776,3265357823,EU
-3265357824,3265358847,NL
-3265358848,3265359359,EU
-3265359360,3265359871,NL
-3265359872,3265360383,EU
-3265360384,3265360895,CH
+3265347584,3265348607,FR
+3265348608,3265349631,EU
+3265349632,3265351679,FR
+3265351680,3265360895,EU
3265360896,3265361919,GB
3265361920,3265363967,IT
3265363968,3265366015,ES
-3265366016,3265366527,EU
-3265366528,3265367039,DK
-3265367040,3265368063,EU
+3265366016,3265368063,EU
3265368064,3265369087,DK
-3265369088,3265370111,EU
-3265370112,3265370623,DK
-3265370624,3265371135,EU
+3265369088,3265371135,EU
3265371136,3265376255,DE
-3265376256,3265376767,EU
-3265376768,3265378303,GB
+3265376256,3265377279,EU
+3265377280,3265378303,GB
3265378304,3265379327,NL
3265379328,3265380351,EU
3265380352,3265382399,GB
-3265382400,3265382911,CH
-3265382912,3265383935,EU
-3265383936,3265384447,GB
-3265384448,3265386495,DE
+3265382400,3265386495,EU
3265386496,3265386751,NL
3265386752,3265387007,EU
3265387008,3265387263,SE
3265387264,3265388543,EU
3265388544,3265392639,GB
-3265392640,3265393151,EU
-3265393152,3265394175,GB
-3265394176,3265394687,EU
+3265392640,3265394687,EU
3265394688,3265396735,GB
3265396736,3265527807,DE
3265527808,3265582476,GB
@@ -56706,8 +56793,7 @@
3265595904,3265596415,RU
3265596416,3265596927,GB
3265596928,3265597439,FR
-3265597440,3265597951,MC
-3265597952,3265599999,RU
+3265597440,3265599999,RU
3265600000,3265600511,HU
3265600512,3265601023,GB
3265601024,3265601535,RU
@@ -56756,7 +56842,6 @@
3265902592,3265904383,GB
3265904384,3265904639,RO
3265904640,3265904895,DE
-3265904896,3265905151,UA
3265905152,3265905663,GB
3265905664,3265905919,IE
3265905920,3265906175,GB
@@ -56791,7 +56876,7 @@
3265915136,3265915391,RO
3265915392,3265915647,GB
3265915648,3265915903,RO
-3265915904,3265916415,PL
+3265915904,3265916159,PL
3265916416,3265916671,UA
3265916672,3265916927,DE
3265916928,3265917183,FR
@@ -56848,10 +56933,28 @@
3266345984,3266346495,GB
3266346496,3266346751,IT
3266346752,3266347007,FR
-3266347008,3266351615,EU
-3266351616,3266352127,GB
-3266352128,3266354175,EU
-3266354176,3266355199,GB
+3266347008,3266351359,EU
+3266351360,3266352607,GB
+3266352608,3266352895,EU
+3266352896,3266353567,GB
+3266353568,3266353583,EU
+3266353584,3266353591,GB
+3266353592,3266353663,EU
+3266353664,3266353671,GB
+3266353672,3266353679,EU
+3266353680,3266353687,GB
+3266353688,3266353775,EU
+3266353776,3266353783,US
+3266353784,3266353855,EU
+3266353856,3266353863,GB
+3266353864,3266353879,EU
+3266353880,3266353887,GB
+3266353888,3266353895,EU
+3266353896,3266353903,GB
+3266353904,3266353919,EU
+3266353920,3266354175,GB
+3266354176,3266354687,EU
+3266354688,3266355199,GB
3266355200,3266363391,RO
3266363392,3266371583,GB
3266371584,3266379775,HU
@@ -56964,94 +57067,44 @@
3267368481,3267368481,EU
3267368482,3267428351,DK
3267428352,3267493887,GB
-3267493888,3267494399,EU
-3267494400,3267494911,GB
-3267494912,3267495423,EU
-3267495424,3267495935,GB
-3267495936,3267496959,EU
-3267496960,3267497983,GB
-3267497984,3267499519,EU
-3267499520,3267500031,GB
-3267500032,3267500543,EU
-3267500544,3267504127,GB
-3267504128,3267506175,EU
-3267506176,3267506687,DE
-3267506688,3267508223,EU
-3267508224,3267508735,DE
-3267508736,3267509759,EU
-3267509760,3267510271,GB
-3267510272,3267512831,FR
-3267512832,3267513343,GB
+3267493888,3267501055,EU
+3267501056,3267504127,GB
+3267504128,3267511295,EU
+3267511296,3267512319,FR
+3267512320,3267513343,EU
3267513344,3267514367,FR
3267514368,3267515391,DE
-3267515392,3267515903,EU
-3267515904,3267517951,DE
-3267517952,3267518463,EU
-3267518464,3267518975,DE
-3267518976,3267519487,EU
-3267519488,3267519999,DE
-3267520000,3267520511,EU
+3267515392,3267516415,EU
+3267516416,3267517439,DE
+3267517440,3267520511,EU
3267520512,3267521535,DE
3267521536,3267522559,EU
-3267522560,3267524095,DE
-3267524096,3267527167,EU
-3267527168,3267527679,DE
+3267522560,3267523583,DE
+3267523584,3267527679,EU
3267527680,3267528703,FR
3267528704,3267529727,EU
3267529728,3267530751,AT
-3267530752,3267531263,EU
-3267531264,3267532799,FR
+3267530752,3267531775,EU
+3267531776,3267532799,FR
3267532800,3267534847,EU
3267534848,3267536895,FR
-3267536896,3267537407,EU
-3267537408,3267538943,FR
-3267538944,3267539455,EU
-3267539456,3267539967,NL
-3267539968,3267540991,EU
-3267540992,3267541503,NL
-3267541504,3267542015,EU
-3267542016,3267542527,GB
-3267542528,3267543551,EU
-3267543552,3267544063,GB
-3267544064,3267546111,EU
-3267546112,3267546623,ES
-3267546624,3267547135,FR
-3267547136,3267547647,EU
-3267547648,3267548159,GB
-3267548160,3267548671,EU
-3267548672,3267549183,GB
+3267536896,3267537919,EU
+3267537920,3267538943,FR
+3267538944,3267549183,EU
3267549184,3267550207,DK
-3267550208,3267550719,EU
-3267550720,3267551231,DK
-3267551232,3267551743,AT
-3267551744,3267552255,EU
-3267552256,3267552767,AT
-3267552768,3267553279,EU
-3267553280,3267554303,DK
-3267554304,3267556863,EU
-3267556864,3267557375,IL
-3267557376,3267557887,EU
-3267557888,3267558399,IL
-3267558400,3267558911,CH
-3267558912,3267559423,EU
+3267550208,3267559423,EU
3267559424,3267624959,DE
3267624960,3267630079,EU
3267630080,3267631615,GB
3267631616,3267634175,EU
3267634176,3267635199,GB
-3267635200,3267638783,EU
-3267638784,3267639295,CZ
-3267639296,3267645439,EU
+3267635200,3267645439,EU
3267645440,3267645695,GB
3267645696,3267648255,EU
3267648256,3267648511,GB
3267648512,3267649279,EU
3267649280,3267649535,DE
-3267649536,3267655679,EU
-3267655680,3267656191,IT
-3267656192,3267658751,EU
-3267658752,3267659263,CH
-3267659264,3267662847,EU
+3267649536,3267662847,EU
3267662848,3267663023,GB
3267663024,3267663039,IE
3267663040,3267663103,GB
@@ -57060,21 +57113,14 @@
3267666944,3267667455,EU
3267667456,3267667967,GB
3267667968,3267670015,EU
-3267670016,3267671551,ZA
-3267671552,3267680255,EU
-3267680256,3267680767,SK
-3267680768,3267684351,EU
+3267670016,3267671039,ZA
+3267671040,3267684351,EU
3267684352,3267684863,GB
-3267684864,3267685375,EU
-3267685376,3267685887,NL
-3267685888,3267686399,CH
-3267686400,3267690495,EU
+3267684864,3267690495,EU
3267690496,3267691519,FI
3267691520,3267692543,SE
3267692544,3267756031,FI
-3267756032,3267760639,SE
-3267760640,3267761151,NO
-3267761152,3267821567,SE
+3267756032,3267821567,SE
3267821568,3267824639,FR
3267824640,3267824895,MQ
3267824896,3267845375,FR
@@ -57094,25 +57140,254 @@
3268173824,3268182015,MT
3268182016,3268198399,PL
3268198400,3268214783,MA
-3268214784,3268218111,EU
+3268214784,3268215583,EU
+3268215584,3268215615,GB
+3268215616,3268215647,EU
+3268215648,3268215679,GB
+3268215680,3268215711,EU
+3268215712,3268215743,GB
+3268215744,3268215807,EU
+3268215808,3268216063,GB
+3268216064,3268218111,EU
3268218112,3268218367,GB
-3268218368,3268226559,EU
-3268226560,3268226815,GB
-3268226816,3268235935,EU
-3268235936,3268235967,GB
-3268235968,3268238639,EU
-3268238640,3268238655,GB
-3268238656,3268238815,EU
-3268238816,3268238831,GB
-3268238832,3268239615,EU
-3268239616,3268240127,GB
-3268240128,3268249599,EU
+3268218368,3268219807,EU
+3268219808,3268219823,GB
+3268219824,3268221439,EU
+3268221440,3268221471,GB
+3268221472,3268221503,EU
+3268221504,3268221599,GB
+3268221600,3268221695,EU
+3268221696,3268221951,GB
+3268221952,3268222975,EU
+3268222976,3268223167,GB
+3268223168,3268223199,EU
+3268223200,3268223231,GB
+3268223232,3268224767,EU
+3268224768,3268225023,US
+3268225024,3268226367,EU
+3268226368,3268226399,GB
+3268226400,3268226495,EU
+3268226496,3268226815,GB
+3268226816,3268227327,EU
+3268227328,3268227391,GB
+3268227392,3268227519,EU
+3268227520,3268227615,GB
+3268227616,3268231167,EU
+3268231168,3268231199,GB
+3268231200,3268231319,EU
+3268231320,3268231359,GB
+3268231360,3268231391,EU
+3268231392,3268231423,GB
+3268231424,3268231647,EU
+3268231648,3268231679,GB
+3268231680,3268231743,EU
+3268231744,3268231807,GB
+3268231808,3268232223,EU
+3268232224,3268232243,GB
+3268232244,3268232351,EU
+3268232352,3268232367,GB
+3268232368,3268232383,EU
+3268232384,3268232415,GB
+3268232416,3268232479,EU
+3268232480,3268232575,GB
+3268232576,3268232959,EU
+3268232960,3268233087,GB
+3268233088,3268233983,EU
+3268233984,3268234047,GB
+3268234048,3268234175,EU
+3268234176,3268234239,GB
+3268234240,3268234559,EU
+3268234560,3268234623,GB
+3268234624,3268235007,EU
+3268235008,3268235263,GB
+3268235264,3268235519,DE
+3268235520,3268235775,GB
+3268235776,3268235935,EU
+3268235936,3268236031,GB
+3268236032,3268236191,EU
+3268236192,3268236207,GB
+3268236208,3268236543,EU
+3268236544,3268236607,GB
+3268236608,3268236671,EU
+3268236672,3268236799,GB
+3268236800,3268238335,EU
+3268238336,3268238359,GB
+3268238360,3268238479,EU
+3268238480,3268238847,GB
+3268238848,3268239583,EU
+3268239584,3268240127,GB
+3268240128,3268240159,EU
+3268240160,3268240191,GB
+3268240192,3268240383,EU
+3268240384,3268240399,GB
+3268240400,3268240479,EU
+3268240480,3268240487,GB
+3268240488,3268240687,EU
+3268240688,3268240695,GB
+3268240696,3268240711,EU
+3268240712,3268240735,GB
+3268240736,3268240743,EU
+3268240744,3268240751,GB
+3268240752,3268240975,EU
+3268240976,3268240991,GB
+3268240992,3268241007,EU
+3268241008,3268241023,GB
+3268241024,3268241543,EU
+3268241544,3268241551,GB
+3268241552,3268241639,EU
+3268241640,3268241655,GB
+3268241656,3268242495,EU
+3268242496,3268242523,GB
+3268242524,3268242879,EU
+3268242880,3268243071,GB
+3268243072,3268243327,EU
+3268243328,3268243391,GB
+3268243392,3268243743,EU
+3268243744,3268243775,GB
+3268243776,3268244775,EU
+3268244776,3268244783,GB
+3268244784,3268244791,EU
+3268244792,3268244799,GB
+3268244800,3268245503,EU
+3268245504,3268245759,GB
+3268245760,3268246271,EU
+3268246272,3268246783,GB
+3268246784,3268246799,EU
+3268246800,3268246807,GB
+3268246808,3268246975,EU
+3268246976,3268246991,GB
+3268246992,3268248319,EU
+3268248320,3268248447,GB
+3268248448,3268248511,EU
+3268248512,3268248543,GB
+3268248544,3268249599,EU
3268249600,3268251647,GB
-3268251648,3268254591,EU
+3268251648,3268254463,EU
+3268254464,3268254543,GB
+3268254544,3268254591,EU
3268254592,3268254607,GB
-3268254608,3268265983,EU
+3268254608,3268254623,EU
+3268254624,3268254639,GB
+3268254640,3268254895,EU
+3268254896,3268254903,GB
+3268254904,3268255823,EU
+3268255824,3268255863,GB
+3268255864,3268255871,EU
+3268255872,3268255887,GB
+3268255888,3268255895,EU
+3268255896,3268255919,GB
+3268255920,3268255951,EU
+3268255952,3268255959,GB
+3268255960,3268255967,EU
+3268255968,3268255983,GB
+3268255984,3268256895,EU
+3268256896,3268256959,GB
+3268256960,3268257023,EU
+3268257024,3268257055,GB
+3268257056,3268257087,EU
+3268257088,3268257119,GB
+3268257120,3268257415,EU
+3268257416,3268257419,GB
+3268257420,3268257431,EU
+3268257432,3268257439,IT
+3268257440,3268257463,EU
+3268257464,3268257471,GB
+3268257472,3268257487,EU
+3268257488,3268257527,GB
+3268257528,3268258559,EU
+3268258560,3268258623,GB
+3268258624,3268258687,EU
+3268258688,3268258751,GB
+3268258752,3268259519,EU
+3268259520,3268259527,GB
+3268259528,3268259543,EU
+3268259544,3268259551,GB
+3268259552,3268259559,EU
+3268259560,3268259575,GB
+3268259576,3268259807,EU
+3268259808,3268259815,GB
+3268259816,3268259831,EU
+3268259832,3268260095,GB
+3268260096,3268260351,EU
+3268260352,3268260383,GB
+3268260384,3268260415,EU
+3268260416,3268260447,GB
+3268260448,3268260511,EU
+3268260512,3268260607,GB
+3268260608,3268260639,EU
+3268260640,3268260647,GB
+3268260648,3268260655,EU
+3268260656,3268260671,GB
+3268260672,3268261935,EU
+3268261936,3268261951,GB
+3268261952,3268262767,EU
+3268262768,3268262783,GB
+3268262784,3268262879,EU
+3268262880,3268262887,GB
+3268262888,3268263231,EU
+3268263232,3268263263,GB
+3268263264,3268263775,EU
+3268263776,3268263783,GB
+3268263784,3268264735,EU
+3268264736,3268264767,GB
+3268264768,3268265415,EU
+3268265416,3268265431,GB
+3268265432,3268265983,EU
3268265984,3268266495,GB
-3268266496,3268280319,EU
+3268266496,3268266983,EU
+3268266984,3268266991,GB
+3268266992,3268267535,EU
+3268267536,3268267551,GB
+3268267552,3268267583,EU
+3268267584,3268267599,GB
+3268267600,3268267615,EU
+3268267616,3268267647,GB
+3268267648,3268267743,EU
+3268267744,3268267775,GB
+3268267776,3268267951,EU
+3268267952,3268267959,GB
+3268267960,3268268543,EU
+3268268544,3268268799,GB
+3268268800,3268270351,EU
+3268270352,3268270367,GB
+3268270368,3268270495,EU
+3268270496,3268270511,GB
+3268270512,3268270847,EU
+3268270848,3268271359,GB
+3268271360,3268271911,EU
+3268271912,3268271919,GB
+3268271920,3268271927,EU
+3268271928,3268271935,GB
+3268271936,3268272703,EU
+3268272704,3268272711,GB
+3268272712,3268272727,EU
+3268272728,3268272735,GB
+3268272736,3268273023,EU
+3268273024,3268273151,GB
+3268273152,3268274111,EU
+3268274112,3268274175,GB
+3268274176,3268274455,EU
+3268274456,3268274459,GB
+3268274460,3268274527,EU
+3268274528,3268274543,GB
+3268274544,3268274559,EU
+3268274560,3268274591,GB
+3268274592,3268275983,EU
+3268275984,3268275999,GB
+3268276000,3268276639,EU
+3268276640,3268276655,GB
+3268276656,3268276671,EU
+3268276672,3268276687,GB
+3268276688,3268276863,EU
+3268276864,3268276895,GB
+3268276896,3268277055,EU
+3268277056,3268277119,GB
+3268277120,3268277759,EU
+3268277760,3268278015,GB
+3268278016,3268278463,EU
+3268278464,3268278495,GB
+3268278496,3268280063,EU
+3268280064,3268280319,GB
3268280320,3268345855,FR
3268345856,3268411391,GB
3268411392,3268426751,AT
@@ -57163,7 +57438,7 @@
3268765184,3268765695,RU
3268765696,3268766719,UA
3268766720,3268767231,IL
-3268767232,3268767743,UA
+3268767232,3268767743,RU
3268767744,3268768255,NL
3268768256,3268768767,BE
3268768768,3268769279,RU
@@ -57180,29 +57455,164 @@
3269066752,3269132287,SE
3269132288,3269197823,GR
3269197824,3269263359,RU
-3269263360,3269266943,EU
+3269263360,3269264639,EU
+3269264640,3269264895,DE
+3269264896,3269265855,EU
+3269265856,3269265919,DE
+3269265920,3269266175,GB
+3269266176,3269266687,EU
+3269266688,3269266943,DE
3269266944,3269267455,GB
-3269267456,3269276159,EU
-3269276160,3269276287,GB
-3269276288,3269277183,EU
+3269267456,3269272575,EU
+3269272576,3269272583,DE
+3269272584,3269272703,EU
+3269272704,3269272831,DE
+3269272832,3269272847,GB
+3269272848,3269272863,NL
+3269272864,3269272887,GB
+3269272888,3269272895,EU
+3269272896,3269273087,NL
+3269273088,3269273343,DE
+3269273344,3269273599,EU
+3269273600,3269273855,GB
+3269273856,3269275647,DE
+3269275648,3269275903,EU
+3269275904,3269276159,DE
+3269276160,3269276415,GB
+3269276416,3269277183,EU
3269277184,3269277695,FR
-3269277696,3269278719,NL
-3269278720,3269279743,EU
-3269279744,3269281279,NL
-3269281280,3269282303,EU
+3269277696,3269277759,GB
+3269277760,3269278719,NL
+3269278720,3269279231,EU
+3269279232,3269279487,NL
+3269279488,3269279671,EU
+3269279672,3269279679,CH
+3269279680,3269279743,EU
+3269279744,3269280255,GB
+3269280256,3269280271,DE
+3269280272,3269280767,NL
+3269280768,3269281023,GB
+3269281024,3269281279,DE
+3269281280,3269281535,FR
+3269281536,3269282047,EU
+3269282048,3269282303,DE
3269282304,3269282559,GB
-3269282560,3269291775,EU
+3269282560,3269282815,FR
+3269282816,3269283327,EU
+3269283328,3269283583,DE
+3269283584,3269283871,EU
+3269283872,3269283903,DE
+3269283904,3269284095,EU
+3269284096,3269284351,GB
+3269284352,3269284863,EU
+3269284864,3269285055,FR
+3269285056,3269285087,EU
+3269285088,3269285135,DE
+3269285136,3269285151,GB
+3269285152,3269285215,DE
+3269285216,3269285311,EU
+3269285312,3269285327,DE
+3269285328,3269285335,EU
+3269285336,3269285343,FR
+3269285344,3269285344,GB
+3269285345,3269285345,EU
+3269285346,3269285631,GB
+3269285632,3269285887,DE
+3269285888,3269286399,EU
+3269286400,3269286463,DE
+3269286464,3269288687,EU
+3269288688,3269288959,DE
+3269288960,3269290559,EU
+3269290560,3269290575,DE
+3269290576,3269290591,EU
+3269290592,3269290687,DE
+3269290688,3269290735,EU
+3269290736,3269290743,DE
+3269290744,3269291263,EU
+3269291264,3269291519,DE
+3269291520,3269291575,GB
+3269291576,3269291583,EU
+3269291584,3269291647,GB
+3269291648,3269291775,EU
3269291776,3269292287,ES
-3269292288,3269305855,EU
+3269292288,3269293119,EU
+3269293120,3269293151,DE
+3269293152,3269293207,EU
+3269293208,3269293215,DE
+3269293216,3269293247,EU
+3269293248,3269293279,DE
+3269293280,3269293375,EU
+3269293376,3269293391,DE
+3269293392,3269293855,EU
+3269293856,3269293887,DE
+3269293888,3269293919,EU
+3269293920,3269293951,DE
+3269293952,3269296231,EU
+3269296232,3269296235,DE
+3269296236,3269296367,EU
+3269296368,3269296375,DE
+3269296376,3269297151,EU
+3269297152,3269297663,GB
+3269297664,3269298663,EU
+3269298664,3269298671,DE
+3269298672,3269303039,EU
+3269303040,3269303295,DE
+3269303296,3269303423,GB
+3269303424,3269303551,EU
+3269303552,3269303679,DE
+3269303680,3269305343,EU
+3269305344,3269305351,DE
+3269305352,3269305855,EU
3269305856,3269306879,DE
-3269306880,3269317663,EU
+3269306880,3269307647,EU
+3269307648,3269307903,DE
+3269307904,3269310655,EU
+3269310656,3269310671,DE
+3269310672,3269310975,EU
+3269310976,3269311231,DE
+3269311232,3269311871,EU
+3269311872,3269311999,DE
+3269312000,3269313791,EU
+3269313792,3269314175,DE
+3269314176,3269314191,EU
+3269314192,3269314199,DE
+3269314200,3269315583,EU
+3269315584,3269315591,DE
+3269315592,3269317631,EU
+3269317632,3269317663,GB
3269317664,3269317671,IE
-3269317672,3269319167,EU
-3269319168,3269319679,DE
-3269319680,3269320703,EU
+3269317672,3269317887,GB
+3269317888,3269318399,DE
+3269318400,3269318655,GB
+3269318656,3269318983,DE
+3269318984,3269319007,EU
+3269319008,3269319047,DE
+3269319048,3269319055,EU
+3269319056,3269319071,DE
+3269319072,3269319135,EU
+3269319136,3269320447,DE
+3269320448,3269320703,EU
3269320704,3269321727,GB
-3269321728,3269327871,EU
-3269327872,3269328383,DE
+3269321728,3269322239,EU
+3269322240,3269322495,DE
+3269322496,3269322655,EU
+3269322656,3269322671,DE
+3269322672,3269322751,EU
+3269322752,3269323263,DE
+3269323264,3269326847,EU
+3269326848,3269326855,DE
+3269326856,3269326959,EU
+3269326960,3269326971,DE
+3269326972,3269326991,EU
+3269326992,3269326999,DE
+3269327000,3269327023,EU
+3269327024,3269327039,DE
+3269327040,3269327055,EU
+3269327056,3269327103,DE
+3269327104,3269327759,EU
+3269327760,3269327767,DE
+3269327768,3269327863,EU
+3269327864,3269328383,DE
3269328384,3269328895,EU
3269328896,3269459967,GB
3269459968,3269525503,ES
@@ -57217,36 +57627,17 @@
3269918720,3269984255,DE
3269984256,3270049791,AT
3270049792,3270115327,DE
-3270115328,3270125055,EU
-3270125056,3270125567,DK
-3270125568,3270143999,EU
-3270144000,3270144511,NO
-3270144512,3270148351,EU
+3270115328,3270148351,EU
3270148352,3270149887,FI
3270149888,3270150655,EU
3270150656,3270151423,FI
3270151424,3270152703,EU
3270152704,3270153727,FI
-3270153728,3270155007,EU
-3270155008,3270155519,FI
-3270155520,3270156287,EU
-3270156288,3270156799,DK
-3270156800,3270166527,EU
+3270153728,3270166527,EU
3270166528,3270167551,NO
-3270167552,3270170111,EU
-3270170112,3270170623,NO
-3270170624,3270182911,EU
-3270182912,3270183423,CH
-3270183424,3270190079,EU
-3270190080,3270190591,IT
-3270190592,3270190911,CH
-3270190912,3270230271,EU
-3270230272,3270230783,LU
-3270230784,3270235135,EU
+3270167552,3270235135,EU
3270235136,3270236159,NL
-3270236160,3270238207,EU
-3270238208,3270238719,NL
-3270238720,3270246399,EU
+3270236160,3270246399,EU
3270246400,3270348287,SE
3270348288,3270348543,EU
3270348544,3270377471,SE
@@ -57397,69 +57788,29 @@
3271163904,3271224319,FR
3271224320,3271224575,MQ
3271224576,3271229439,FR
-3271229440,3271301631,FI
-3271301632,3271302143,AX
-3271302144,3271360511,FI
-3271360512,3271361023,GB
-3271361024,3271361535,EU
-3271361536,3271362559,GB
-3271362560,3271364607,EU
-3271364608,3271365631,GB
-3271365632,3271367679,EU
-3271367680,3271368191,GB
-3271368192,3271368703,EU
-3271368704,3271369727,GB
-3271369728,3271370239,EU
-3271370240,3271370751,GB
-3271370752,3271374335,EU
-3271374336,3271374847,DE
-3271374848,3271375359,EU
-3271375360,3271375871,CH
-3271375872,3271376895,EU
-3271376896,3271377407,ES
-3271377408,3271377919,NL
-3271377920,3271378431,BE
-3271378432,3271378943,EU
+3271229440,3271360511,FI
+3271360512,3271378943,EU
3271378944,3271380991,GB
-3271380992,3271382015,EU
-3271382016,3271382527,IT
-3271382528,3271383039,IL
-3271383040,3271385599,EU
-3271385600,3271386111,DE
-3271386112,3271389183,EU
+3271380992,3271389183,EU
3271389184,3271391231,DE
-3271391232,3271391743,NL
-3271391744,3271392767,EU
-3271392768,3271393279,FR
-3271393280,3271393791,AT
-3271393792,3271395327,EU
+3271391232,3271395327,EU
3271395328,3271396351,IT
-3271396352,3271398399,EU
-3271398400,3271398911,DE
-3271398912,3271399423,EU
-3271399424,3271399935,BE
-3271399936,3271401983,EU
-3271401984,3271402495,DK
-3271402496,3271407103,EU
-3271407104,3271407615,AT
-3271407616,3271409663,EU
+3271396352,3271409663,EU
3271409664,3271417855,BE
-3271417856,3271418367,EU
-3271418368,3271418879,FR
-3271418880,3271419391,EU
-3271419392,3271422463,FR
-3271422464,3271423487,EU
-3271423488,3271423999,FR
-3271424000,3271425535,EU
-3271425536,3271426047,DE
+3271417856,3271419903,EU
+3271419904,3271421951,FR
+3271421952,3271426047,EU
3271426048,3271491583,FR
3271491584,3271513343,DK
3271513344,3271513599,EU
3271513600,3271557119,DK
3271557120,3271589887,BE
3271589888,3271688191,NO
-3271688192,3271694847,EU
-3271694848,3271695103,GB
+3271688192,3271691775,EU
+3271691776,3271692031,US
+3271692032,3271692287,GB
+3271692288,3271694591,EU
+3271694592,3271695103,GB
3271695104,3271696383,EU
3271696384,3271698431,GB
3271698432,3271704575,EU
@@ -57540,7 +57891,7 @@
3271913984,3271914495,RO
3271914496,3271915007,ES
3271915008,3271915519,SE
-3271915520,3271916031,NL
+3271915520,3271916031,DE
3271916032,3271916543,GB
3271916544,3271917311,UA
3271917312,3271925759,RU
@@ -57584,14 +57935,12 @@
3272041887,3272048639,FR
3272048640,3272056831,NL
3272056832,3272065023,RU
-3272065024,3272081407,GB
-3272081408,3272081919,PT
-3272081920,3272082431,CV
-3272082432,3272084025,PT
+3272065024,3272073727,GB
+3272073728,3272073855,IE
+3272073856,3272081407,GB
+3272081408,3272084025,PT
3272084026,3272084026,AO
-3272084027,3272086015,PT
-3272086016,3272086527,ST
-3272086528,3272087551,PT
+3272084027,3272087551,PT
3272087552,3272088575,MR
3272088576,3272089599,PT
3272089600,3272090111,NO
@@ -57648,28 +57997,162 @@
3272138240,3272138751,BG
3272138752,3272146943,DE
3272146944,3272212479,RU
-3272212480,3272213503,ES
-3272213504,3272214271,EU
+3272212480,3272212991,GB
+3272212992,3272213375,ES
+3272213376,3272213391,IT
+3272213392,3272213399,GB
+3272213400,3272213407,ES
+3272213408,3272213415,NL
+3272213416,3272213423,ES
+3272213424,3272213431,NL
+3272213432,3272213439,GB
+3272213440,3272213471,ES
+3272213472,3272213487,CY
+3272213488,3272213495,GB
+3272213496,3272213503,ES
+3272213504,3272213567,IT
+3272213568,3272213575,GB
+3272213576,3272213583,IE
+3272213584,3272213599,DE
+3272213600,3272213631,EU
+3272213632,3272213639,NL
+3272213640,3272213655,EU
+3272213656,3272213663,IT
+3272213664,3272213671,EU
+3272213672,3272213679,IT
+3272213680,3272213695,EU
+3272213696,3272213735,IT
+3272213736,3272213751,EU
+3272213752,3272213759,IT
+3272213760,3272214015,NL
+3272214016,3272214271,ES
3272214272,3272214527,GB
3272214528,3272215039,FR
-3272215040,3272217087,EU
+3272215040,3272215295,ES
+3272215296,3272215551,NL
+3272215552,3272215807,CH
+3272215808,3272215823,NL
+3272215824,3272215871,EU
+3272215872,3272215879,BE
+3272215880,3272215883,EU
+3272215884,3272215919,CH
+3272215920,3272215935,NL
+3272215936,3272215999,GB
+3272216000,3272216015,EU
+3272216016,3272216031,DE
+3272216032,3272216039,EU
+3272216040,3272216047,GB
+3272216048,3272216191,EU
+3272216192,3272216207,BE
+3272216208,3272216215,EU
+3272216216,3272216223,FR
+3272216224,3272216231,DE
+3272216232,3272216239,EU
+3272216240,3272216255,NL
+3272216256,3272216287,CH
+3272216288,3272216303,EU
+3272216304,3272216311,ES
+3272216312,3272216319,EU
+3272216320,3272216351,NL
+3272216352,3272216383,DE
+3272216384,3272216447,CH
+3272216448,3272216451,EU
+3272216452,3272216455,NL
+3272216456,3272216463,EU
+3272216464,3272216479,FR
+3272216480,3272216495,IR
+3272216496,3272216511,EU
+3272216512,3272216575,IT
+3272216576,3272216895,GB
+3272216896,3272216911,FR
+3272216912,3272216927,DE
+3272216928,3272216959,EU
+3272216960,3272217007,GB
+3272217008,3272217087,EU
3272217088,3272217151,GB
-3272217152,3272217855,EU
+3272217152,3272217215,EU
+3272217216,3272217279,BE
+3272217280,3272217303,DE
+3272217304,3272217311,BE
+3272217312,3272217343,EU
+3272217344,3272217599,GB
+3272217600,3272217631,CH
+3272217632,3272217855,EU
3272217856,3272217875,ES
-3272217876,3272218111,EU
+3272217876,3272217879,EU
+3272217880,3272217895,IT
+3272217896,3272217911,ES
+3272217912,3272217919,EU
+3272217920,3272217983,DE
+3272217984,3272218079,ES
+3272218080,3272218111,EU
3272218112,3272218623,GB
-3272218624,3272223999,EU
+3272218624,3272218639,RU
+3272218640,3272218671,DE
+3272218672,3272218687,EU
+3272218688,3272218719,DE
+3272218720,3272218879,EU
+3272218880,3272219135,BE
+3272219136,3272219391,NL
+3272219392,3272219647,GB
+3272219648,3272219903,FR
+3272219904,3272220159,DE
+3272220160,3272220415,FR
+3272220416,3272221183,GB
+3272221184,3272221439,NL
+3272221440,3272221447,SE
+3272221448,3272221455,NO
+3272221456,3272221463,SE
+3272221464,3272221695,EU
+3272221696,3272221951,NL
+3272221952,3272222207,GB
+3272222208,3272222463,ES
+3272222464,3272222719,NL
+3272222720,3272222975,EU
+3272222976,3272223015,GB
+3272223016,3272223023,EU
+3272223024,3272223039,GB
+3272223040,3272223231,EU
+3272223232,3272223487,NL
+3272223488,3272223503,SG
+3272223504,3272223743,EU
+3272223744,3272223775,GI
+3272223776,3272223807,EU
+3272223808,3272223815,CY
+3272223816,3272223823,EU
+3272223824,3272223839,GB
+3272223840,3272223999,EU
3272224000,3272224255,GB
-3272224256,3272225279,EU
-3272225280,3272225791,IT
-3272225792,3272227839,EU
-3272227840,3272228351,ES
-3272228352,3272228863,NL
+3272224256,3272224383,GI
+3272224384,3272224511,EU
+3272224512,3272225279,GB
+3272225280,3272225535,IT
+3272225536,3272225791,GB
+3272225792,3272225855,EU
+3272225856,3272225919,GB
+3272225920,3272226047,EU
+3272226048,3272226815,FR
+3272226816,3272227071,GB
+3272227072,3272227327,FR
+3272227328,3272227359,US
+3272227360,3272227511,GB
+3272227512,3272227519,EU
+3272227520,3272227583,GB
+3272227584,3272227839,FR
+3272227840,3272228095,ES
+3272228096,3272228223,GB
+3272228224,3272228351,ES
+3272228352,3272228607,FR
+3272228608,3272228623,NL
+3272228624,3272228631,CY
+3272228632,3272228639,NL
+3272228640,3272228671,IT
+3272228672,3272228703,DE
+3272228704,3272228735,FR
+3272228736,3272228799,NL
+3272228800,3272228863,CH
3272228864,3272237055,LU
-3272237056,3272238079,IM
-3272238080,3272238591,GB
-3272238592,3272244223,IM
-3272244224,3272245247,GB
+3272237056,3272245247,IM
3272245248,3272261631,FI
3272261632,3272261887,MT
3272261888,3272262143,BG
@@ -57717,8 +58200,8 @@
3272392704,3272400895,AT
3272400896,3272402559,EU
3272402560,3272402623,GB
-3272402624,3272403455,EU
-3272403456,3272404991,FR
+3272402624,3272403967,EU
+3272403968,3272404991,FR
3272404992,3272406015,DE
3272406016,3272407039,NL
3272407040,3272409087,EU
@@ -57737,7 +58220,9 @@
3272422912,3272423423,SE
3272423424,3272423935,BE
3272423936,3272424447,FR
-3272424448,3272441855,GB
+3272424448,3272424703,GB
+3272424704,3272425471,DE
+3272425472,3272441855,GB
3272441856,3272474623,LV
3272474624,3272474879,FR
3272474880,3272475135,NL
@@ -57799,16 +58284,10 @@
3272628224,3272629247,UA
3272629248,3272638463,RU
3272638464,3272646655,ES
-3272646656,3272652287,GB
-3272652288,3272652799,FR
-3272652800,3272654847,GB
+3272646656,3272654847,GB
3272654848,3272663039,FI
3272663040,3272671231,AT
-3272671232,3272706559,SE
-3272706560,3272707071,IE
-3272707072,3272713471,SE
-3272713472,3272713983,GB
-3272713984,3272736767,SE
+3272671232,3272736767,SE
3272736768,3272737791,IT
3272737792,3272738815,GB
3272738816,3272739839,IL
@@ -57873,11 +58352,7 @@
3272908032,3272908287,CH
3272908288,3272908543,AT
3272908544,3272908799,DE
-3272908800,3272909823,SK
-3272909824,3272910335,NO
-3272910336,3272911871,SK
-3272911872,3272912383,CZ
-3272912384,3272916991,SK
+3272908800,3272916991,SK
3272916992,3272917503,MC
3272917504,3272918527,RU
3272918528,3272919039,FR
@@ -57981,41 +58456,220 @@
3273302016,3273310207,RU
3273310208,3273318399,AT
3273318400,3273326591,GB
-3273326592,3273327359,EU
+3273326592,3273326847,IE
+3273326848,3273326983,EU
+3273326984,3273326987,DE
+3273326988,3273326991,EU
+3273326992,3273327047,DE
+3273327048,3273327263,EU
+3273327264,3273327287,DE
+3273327288,3273327359,EU
3273327360,3273327615,IE
-3273327616,3273329663,EU
-3273329664,3273329919,GB
-3273329920,3273330431,EU
-3273330432,3273330687,GB
-3273330688,3273330943,EU
-3273330944,3273331199,GB
-3273331200,3273334271,EU
+3273327616,3273328511,EU
+3273328512,3273328639,DE
+3273328640,3273329191,GB
+3273329192,3273329199,EU
+3273329200,3273329215,DE
+3273329216,3273329279,GB
+3273329280,3273329311,EU
+3273329312,3273329327,GB
+3273329328,3273329407,EU
+3273329408,3273329423,GB
+3273329424,3273329439,DE
+3273329440,3273330175,GB
+3273330176,3273330183,IR
+3273330184,3273330191,IE
+3273330192,3273330199,GB
+3273330200,3273330223,IE
+3273330224,3273330271,GB
+3273330272,3273330431,IE
+3273330432,3273331199,GB
+3273331200,3273331711,EU
+3273331712,3273331791,GB
+3273331792,3273331807,EU
+3273331808,3273331967,GB
+3273331968,3273332031,DE
+3273332032,3273332095,GB
+3273332096,3273332223,DE
+3273332224,3273332479,GB
+3273332480,3273332543,EU
+3273332544,3273332575,DE
+3273332576,3273332607,EU
+3273332608,3273332671,DE
+3273332672,3273333055,EU
+3273333056,3273333119,DE
+3273333120,3273334271,EU
3273334272,3273334783,DE
-3273334784,3273335295,EU
+3273334784,3273335039,EU
+3273335040,3273335295,DE
3273335296,3273335807,GB
-3273335808,3273336881,EU
-3273336882,3273336882,DE
-3273336883,3273339391,EU
-3273339392,3273339903,DE
+3273335808,3273335935,EU
+3273335936,3273335999,DE
+3273336000,3273336847,EU
+3273336848,3273336863,DE
+3273336864,3273336871,GB
+3273336872,3273336895,DE
+3273336896,3273336959,EU
+3273336960,3273337087,DE
+3273337088,3273337855,EU
+3273337856,3273338111,DE
+3273338112,3273338623,EU
+3273338624,3273338879,DE
+3273338880,3273339135,EU
+3273339136,3273339903,DE
3273339904,3273340415,GB
3273340416,3273340927,EU
-3273340928,3273341439,FR
-3273341440,3273342975,EU
+3273340928,3273341695,FR
+3273341696,3273341951,DE
+3273341952,3273342207,GB
+3273342208,3273342463,EU
+3273342464,3273342975,DE
3273342976,3273343999,GB
3273344000,3273344767,DE
-3273344768,3273366015,EU
+3273344768,3273345023,EU
+3273345024,3273345279,DE
+3273345280,3273346815,EU
+3273346816,3273347071,DE
+3273347072,3273347839,EU
+3273347840,3273348351,DE
+3273348352,3273349119,EU
+3273349120,3273349631,DE
+3273349632,3273350271,EU
+3273350272,3273350287,DE
+3273350288,3273350335,EU
+3273350336,3273350351,DE
+3273350352,3273351423,EU
+3273351424,3273351455,DE
+3273351456,3273351503,EU
+3273351504,3273351519,DE
+3273351520,3273351871,EU
+3273351872,3273351903,DE
+3273351904,3273351935,EU
+3273351936,3273352191,DE
+3273352192,3273352927,EU
+3273352928,3273352959,DE
+3273352960,3273352991,EU
+3273352992,3273353023,DE
+3273353024,3273355519,EU
+3273355520,3273356287,DE
+3273356288,3273359887,EU
+3273359888,3273359903,DE
+3273359904,3273360015,EU
+3273360016,3273360079,DE
+3273360080,3273361471,EU
+3273361472,3273361535,DE
+3273361536,3273361631,EU
+3273361632,3273361663,DE
+3273361664,3273361791,EU
+3273361792,3273361823,DE
+3273361824,3273361855,EU
+3273361856,3273361919,DE
+3273361920,3273362047,EU
+3273362048,3273362175,DE
+3273362176,3273362239,EU
+3273362240,3273362255,DE
+3273362256,3273363207,EU
+3273363208,3273363211,DE
+3273363212,3273363327,EU
+3273363328,3273363391,DE
+3273363392,3273364607,EU
+3273364608,3273364735,DE
+3273364736,3273364991,EU
+3273364992,3273365247,DE
+3273365248,3273365503,EU
+3273365504,3273365519,NL
+3273365520,3273365543,GB
+3273365544,3273365759,NL
+3273365760,3273365767,GB
+3273365768,3273365887,EU
+3273365888,3273366015,FR
3273366016,3273366527,DE
-3273366528,3273368063,EU
+3273366528,3273367295,EU
+3273367296,3273367423,DE
+3273367424,3273367551,EU
+3273367552,3273367567,DE
+3273367568,3273368063,EU
3273368064,3273368575,DE
-3273368576,3273372671,EU
-3273372672,3273373695,DE
-3273373696,3273375743,EU
+3273368576,3273369343,EU
+3273369344,3273369855,DE
+3273369856,3273370623,EU
+3273370624,3273371135,DE
+3273371136,3273371711,EU
+3273371712,3273371743,DE
+3273371744,3273371759,EU
+3273371760,3273371775,DE
+3273371776,3273371807,EU
+3273371808,3273371823,DE
+3273371824,3273371871,EU
+3273371872,3273371875,DE
+3273371876,3273371999,EU
+3273372000,3273372055,DE
+3273372056,3273372671,EU
+3273372672,3273372927,GB
+3273372928,3273373183,NL
+3273373184,3273373455,GB
+3273373456,3273373567,DE
+3273373568,3273373695,GB
+3273373696,3273375231,EU
+3273375232,3273375551,DE
+3273375552,3273375743,EU
3273375744,3273375871,DE
-3273375872,3273382143,EU
+3273375872,3273375999,EU
+3273376000,3273376255,DE
+3273376256,3273376535,EU
+3273376536,3273376543,DE
+3273376544,3273377791,EU
+3273377792,3273378095,DE
+3273378096,3273378559,EU
+3273378560,3273378815,DE
+3273378816,3273381887,EU
+3273381888,3273382143,DE
3273382144,3273382399,GB
-3273382400,3273390111,EU
-3273390112,3273390143,DE
-3273390144,3273392127,EU
+3273382400,3273382463,DE
+3273382464,3273382479,EU
+3273382480,3273382591,DE
+3273382592,3273382639,EU
+3273382640,3273382687,DE
+3273382688,3273384191,EU
+3273384192,3273384703,DE
+3273384704,3273384959,EU
+3273384960,3273385215,DE
+3273385216,3273385279,EU
+3273385280,3273385343,DE
+3273385344,3273385471,EU
+3273385472,3273385727,DE
+3273385728,3273385759,EU
+3273385760,3273385791,DE
+3273385792,3273385855,EU
+3273385856,3273385919,DE
+3273385920,3273387055,EU
+3273387056,3273387071,DE
+3273387072,3273387215,EU
+3273387216,3273387231,DE
+3273387232,3273387263,EU
+3273387264,3273387519,DE
+3273387520,3273387551,EU
+3273387552,3273387583,DE
+3273387584,3273388159,EU
+3273388160,3273388223,DE
+3273388224,3273388543,EU
+3273388544,3273388807,DE
+3273388808,3273388815,EU
+3273388816,3273388863,DE
+3273388864,3273388871,EU
+3273388872,3273388879,DE
+3273388880,3273388903,EU
+3273388904,3273388911,DE
+3273388912,3273388927,GB
+3273388928,3273389055,DE
+3273389056,3273390079,EU
+3273390080,3273390207,DE
+3273390208,3273390335,EU
+3273390336,3273390463,DE
+3273390464,3273391103,EU
+3273391104,3273391359,DE
+3273391360,3273391871,EU
+3273391872,3273392127,DE
3273392128,3273392639,PL
3273392640,3273393663,RO
3273393664,3273394175,BG
@@ -58050,10 +58704,9 @@
3273440256,3273440767,RO
3273440768,3273441023,AT
3273441024,3273441279,PL
-3273441280,3273443839,FR
-3273443840,3273447423,GB
-3273447424,3273449471,FR
-3273449472,3273449727,GB
+3273441280,3273443327,GB
+3273443328,3273443839,FR
+3273443840,3273449727,GB
3273449728,3273457663,CH
3273457664,3273523199,HR
3273523200,3273588735,DE
@@ -58061,9 +58714,7 @@
3273687040,3273719807,DE
3273719808,3273720831,NL
3273720832,3273720847,IE
-3273720848,3273721855,NL
-3273721856,3273722367,GB
-3273722368,3273726719,NL
+3273720848,3273726719,NL
3273726720,3273726975,GB
3273726976,3273727087,NL
3273727088,3273727088,GB
@@ -58195,7 +58846,7 @@
3274164224,3274164735,AT
3274165248,3274165759,GB
3274165760,3274166271,RU
-3274166272,3274166783,RO
+3274166272,3274166783,AT
3274166784,3274167295,UA
3274167296,3274167807,BG
3274168320,3274168831,PL
@@ -58218,9 +58869,7 @@
3274177536,3274178047,UA
3274178048,3274178559,NL
3274178560,3274244095,GB
-3274244096,3274255106,DK
-3274255107,3274255107,EU
-3274255108,3274309631,DK
+3274244096,3274309631,DK
3274309632,3274326015,FR
3274326016,3274334719,RU
3274334720,3274335231,PL
@@ -58282,8 +58931,7 @@
3274396672,3274397183,PL
3274397184,3274397695,EE
3274397696,3274398207,DE
-3274398208,3274399231,RU
-3274399232,3274399743,EU
+3274398208,3274399743,RU
3274399744,3274407935,LU
3274408192,3274408447,IT
3274408448,3274408703,NL
@@ -58319,47 +58967,159 @@
3274424320,3274435711,SE
3274435712,3274435839,US
3274435840,3274440703,SE
-3274440704,3274446847,EU
-3274446848,3274447743,GB
-3274447744,3274450175,EU
-3274450176,3274450431,GB
-3274450432,3274450591,EU
-3274450592,3274450623,GB
-3274450624,3274451199,EU
-3274451200,3274451711,GB
-3274451712,3274452991,EU
-3274452992,3274453503,GB
-3274453504,3274455343,EU
+3274440704,3274442751,EU
+3274442752,3274443263,GB
+3274443264,3274443519,EU
+3274443520,3274443647,GB
+3274443648,3274443711,EU
+3274443712,3274443775,GB
+3274443776,3274443807,EU
+3274443808,3274444031,GB
+3274444032,3274446335,EU
+3274446336,3274447871,GB
+3274447872,3274448383,EU
+3274448384,3274448639,GB
+3274448640,3274448895,EU
+3274448896,3274449663,GB
+3274449664,3274449919,EU
+3274449920,3274450623,GB
+3274450624,3274450655,EU
+3274450656,3274450687,GB
+3274450688,3274451199,EU
+3274451200,3274452255,GB
+3274452256,3274452263,EU
+3274452264,3274452311,GB
+3274452312,3274452319,EU
+3274452320,3274452335,GB
+3274452336,3274452343,EU
+3274452344,3274452367,GB
+3274452368,3274452383,EU
+3274452384,3274452391,GB
+3274452392,3274452399,EU
+3274452400,3274452423,GB
+3274452424,3274452431,EU
+3274452432,3274452439,GB
+3274452440,3274452447,EU
+3274452448,3274452455,GB
+3274452456,3274452463,EU
+3274452464,3274452471,GB
+3274452472,3274452495,EU
+3274452496,3274452543,GB
+3274452544,3274452559,EU
+3274452560,3274452575,GB
+3274452576,3274452655,EU
+3274452656,3274452703,GB
+3274452704,3274452735,EU
+3274452736,3274452927,GB
+3274452928,3274452991,EU
+3274452992,3274453767,GB
+3274453768,3274453783,EU
+3274453784,3274453791,GB
+3274453792,3274453799,EU
+3274453800,3274453847,GB
+3274453848,3274453863,EU
+3274453864,3274453871,GB
+3274453872,3274453887,EU
+3274453888,3274453903,GB
+3274453904,3274453919,EU
+3274453920,3274453935,GB
+3274453936,3274453943,EU
+3274453944,3274453951,GB
+3274453952,3274453959,EU
+3274453960,3274453975,GB
+3274453976,3274453983,EU
+3274453984,3274453991,GB
+3274453992,3274453999,EU
+3274454000,3274454271,GB
+3274454272,3274454655,EU
+3274454656,3274455311,GB
+3274455312,3274455327,EU
+3274455328,3274455335,GB
+3274455336,3274455343,EU
3274455344,3274455351,GB
-3274455352,3274457087,EU
-3274457088,3274458111,GB
-3274458112,3274459391,EU
-3274459392,3274459903,GB
-3274459904,3274460671,EU
-3274460672,3274461183,GB
-3274461184,3274461695,EU
-3274461696,3274462207,GB
+3274455352,3274455359,EU
+3274455360,3274455375,GB
+3274455376,3274455383,EU
+3274455384,3274455391,GB
+3274455392,3274455399,EU
+3274455400,3274455423,GB
+3274455424,3274455431,EU
+3274455432,3274455439,GB
+3274455440,3274455447,EU
+3274455448,3274455503,GB
+3274455504,3274455519,EU
+3274455520,3274455535,GB
+3274455536,3274455743,EU
+3274455744,3274455807,GB
+3274455808,3274455871,EU
+3274455872,3274455935,GB
+3274455936,3274455967,EU
+3274455968,3274456359,GB
+3274456360,3274456367,EU
+3274456368,3274456375,GB
+3274456376,3274456383,EU
+3274456384,3274456391,GB
+3274456392,3274456399,EU
+3274456400,3274456407,GB
+3274456408,3274456415,EU
+3274456416,3274456447,GB
+3274456448,3274456455,EU
+3274456456,3274456511,GB
+3274456512,3274456527,EU
+3274456528,3274456535,GB
+3274456536,3274456543,EU
+3274456544,3274456559,GB
+3274456560,3274456567,EU
+3274456568,3274460223,GB
+3274460224,3274460415,EU
+3274460416,3274462207,GB
3274462208,3274462463,EU
-3274462464,3274462975,GB
-3274462976,3274463487,EU
-3274463488,3274464767,GB
-3274464768,3274465279,EU
-3274465280,3274465791,GB
-3274465792,3274467327,EU
-3274467328,3274467839,GB
-3274467840,3274468095,EU
-3274468096,3274468863,GB
-3274468864,3274473471,EU
-3274473472,3274481407,GB
-3274481408,3274490879,EU
-3274490880,3274491135,GB
-3274491136,3274491279,EU
-3274491280,3274491287,GB
-3274491288,3274491391,EU
-3274491392,3274491647,GB
-3274491648,3274491903,EU
-3274491904,3274504447,GB
-3274504448,3274506239,EU
+3274462464,3274465023,GB
+3274465024,3274465151,EU
+3274465152,3274466351,GB
+3274466352,3274466367,EU
+3274466368,3274466399,GB
+3274466400,3274466415,EU
+3274466416,3274466463,GB
+3274466464,3274466559,EU
+3274466560,3274466735,GB
+3274466736,3274466743,EU
+3274466744,3274466763,GB
+3274466764,3274466767,EU
+3274466768,3274466783,GB
+3274466784,3274466815,EU
+3274466816,3274467099,GB
+3274467100,3274467103,EU
+3274467104,3274467307,GB
+3274467308,3274467327,EU
+3274467328,3274470383,GB
+3274470384,3274470399,EU
+3274470400,3274470535,GB
+3274470536,3274470655,EU
+3274470656,3274471423,GB
+3274471424,3274471535,EU
+3274471536,3274471615,GB
+3274471616,3274471679,EU
+3274471680,3274471935,GB
+3274471936,3274472959,EU
+3274472960,3274483711,GB
+3274483712,3274489599,EU
+3274489600,3274489855,GB
+3274489856,3274490175,EU
+3274490176,3274491247,GB
+3274491248,3274491255,EU
+3274491256,3274491295,GB
+3274491296,3274491303,EU
+3274491304,3274491319,GB
+3274491320,3274491327,EU
+3274491328,3274491383,GB
+3274491384,3274491391,EU
+3274491392,3274504447,GB
+3274504448,3274505727,EU
+3274505728,3274505791,GB
+3274505792,3274505792,EU
+3274505793,3274505855,GB
+3274505856,3274506239,EU
3274506240,3274571775,IT
3274571776,3274579967,GR
3274579968,3274580991,UA
@@ -58475,50 +59235,27 @@
3274850304,3274866687,GB
3274866688,3274883071,DE
3274883072,3274899455,EE
-3274899456,3274900991,EU
-3274900992,3274901503,DE
-3274901504,3274903039,EU
-3274903040,3274909183,DE
-3274909184,3274910207,EU
-3274910208,3274910719,DE
-3274910720,3274913279,EU
-3274913280,3274914815,DE
-3274914816,3274917375,EU
-3274917376,3274917887,NL
-3274917888,3274918399,BE
-3274918400,3274920959,EU
+3274899456,3274903551,EU
+3274903552,3274908671,DE
+3274908672,3274913791,EU
+3274913792,3274914815,DE
+3274914816,3274920959,EU
3274920960,3274921983,BE
3274921984,3274923263,EU
3274923264,3274924031,NL
-3274924032,3274924543,EU
-3274924544,3274925055,FR
-3274925056,3274926079,EU
+3274924032,3274926079,EU
3274926080,3274928127,FR
-3274928128,3274929663,EU
-3274929664,3274930175,BE
-3274930176,3274930687,IT
-3274930688,3274933247,EU
-3274933248,3274933759,GB
-3274933760,3274935295,EU
-3274935296,3274935807,GB
-3274935808,3274939391,EU
+3274928128,3274939391,EU
3274939392,3274940415,ZA
3274940416,3274941439,EU
3274941440,3274942463,DE
3274942464,3274943487,FR
-3274943488,3274943999,EU
-3274944000,3274944511,FR
+3274943488,3274944511,EU
3274944512,3274948607,NL
3274948608,3274951679,DK
3274951680,3274952703,EU
3274952704,3274953727,AT
-3274953728,3274955263,EU
-3274955264,3274955775,SE
-3274955776,3274958335,EU
-3274958336,3274958847,AT
-3274958848,3274960895,EU
-3274960896,3274961407,AT
-3274961408,3274964991,EU
+3274953728,3274964991,EU
3274964992,3275030527,DE
3275030528,3275096063,ES
3275096064,3275104767,RU
@@ -58570,86 +59307,109 @@
3275399168,3275407359,AT
3275407360,3275415551,GB
3275415552,3275423743,UA
-3275423744,3275423999,EU
-3275424000,3275424511,GB
-3275424512,3275424767,EU
-3275424768,3275425279,GB
-3275425280,3275425791,EU
-3275425792,3275426303,GB
-3275426304,3275426815,EU
-3275426816,3275427327,GB
-3275427328,3275427583,EU
-3275427584,3275428351,GB
-3275428352,3275429887,EU
+3275423744,3275423751,GB
+3275423752,3275423775,EU
+3275423776,3275423839,GB
+3275423840,3275423871,EU
+3275423872,3275424743,GB
+3275424744,3275424751,EU
+3275424752,3275425343,GB
+3275425344,3275425535,EU
+3275425536,3275425559,GB
+3275425560,3275425791,EU
+3275425792,3275428407,GB
+3275428408,3275428415,EU
+3275428416,3275428447,GB
+3275428448,3275429887,EU
3275429888,3275430143,GB
3275430144,3275430271,EU
3275430272,3275430399,GB
-3275430400,3275431935,EU
-3275431936,3275432447,GB
-3275432448,3275432703,EU
-3275432704,3275432959,GB
+3275430400,3275430591,EU
+3275430592,3275430631,GB
+3275430632,3275430655,EU
+3275430656,3275430911,GB
+3275430912,3275431935,EU
+3275431936,3275432959,GB
3275432960,3275433983,EU
-3275433984,3275434495,GB
-3275434496,3275434751,EU
-3275434752,3275435007,GB
-3275435008,3275435263,EU
-3275435264,3275435519,GB
+3275433984,3275435519,GB
3275435520,3275435775,EU
3275435776,3275436543,GB
-3275436544,3275437055,EU
-3275437056,3275437567,GB
-3275437568,3275438079,EU
-3275438080,3275438591,GB
-3275438592,3275438719,EU
-3275438720,3275438847,GB
-3275438848,3275439687,EU
-3275439688,3275439775,GB
-3275439776,3275440127,EU
-3275440128,3275440639,GB
-3275440640,3275442175,EU
-3275442176,3275442687,GB
-3275442688,3275443199,EU
-3275443200,3275443215,GB
-3275443216,3275444223,EU
+3275436544,3275436799,EU
+3275436800,3275438847,GB
+3275438848,3275439103,EU
+3275439104,3275441407,GB
+3275441408,3275441423,EU
+3275441424,3275441439,GB
+3275441440,3275441471,EU
+3275441472,3275441535,GB
+3275441536,3275441599,EU
+3275441600,3275441823,GB
+3275441824,3275441919,EU
+3275441920,3275442047,GB
+3275442048,3275442175,EU
+3275442176,3275442723,GB
+3275442724,3275443199,EU
+3275443200,3275443227,GB
+3275443228,3275443231,EU
+3275443232,3275443239,GB
+3275443240,3275443255,EU
+3275443256,3275443311,GB
+3275443312,3275443327,EU
+3275443328,3275443391,GB
+3275443392,3275443423,EU
+3275443424,3275443439,GB
+3275443440,3275443447,EU
+3275443448,3275443727,GB
+3275443728,3275443759,EU
+3275443760,3275443775,GB
+3275443776,3275444223,EU
3275444224,3275444735,GB
3275444736,3275446271,EU
3275446272,3275447039,GB
-3275447040,3275448319,EU
-3275448320,3275448831,GB
-3275448832,3275449343,EU
-3275449344,3275450111,GB
-3275450112,3275450367,EU
-3275450368,3275450879,GB
-3275450880,3275452415,EU
-3275452416,3275453439,GB
-3275453440,3275453695,EU
-3275453696,3275454975,GB
-3275454976,3275455487,EU
-3275455488,3275455999,GB
-3275456000,3275456447,EU
-3275456448,3275457023,GB
-3275457024,3275457535,FK
-3275457536,3275458559,GB
-3275458560,3275459071,IE
-3275459072,3275460607,EU
-3275460608,3275468740,GB
-3275468741,3275468741,IE
-3275468742,3275472895,GB
-3275472896,3275473151,EU
-3275473152,3275473407,GB
-3275473408,3275473663,EU
-3275473664,3275474175,GB
-3275474176,3275474431,EU
-3275474432,3275474943,GB
-3275474944,3275474951,EU
-3275474952,3275474959,GB
-3275474960,3275475199,EU
-3275475200,3275475455,GB
-3275475456,3275476991,EU
-3275476992,3275477503,GB
-3275477504,3275479039,EU
-3275479040,3275480319,GB
-3275480320,3275489279,EU
+3275447040,3275447055,EU
+3275447056,3275447151,GB
+3275447152,3275448319,EU
+3275448320,3275450207,GB
+3275450208,3275450223,EU
+3275450224,3275450879,GB
+3275450880,3275451231,EU
+3275451232,3275451263,GB
+3275451264,3275451391,EU
+3275451392,3275451663,GB
+3275451664,3275451679,EU
+3275451680,3275451711,GB
+3275451712,3275452415,EU
+3275452416,3275457023,GB
+3275457024,3275457791,FK
+3275457792,3275458559,GB
+3275458560,3275460095,IE
+3275460096,3275460223,GB
+3275460224,3275460239,IE
+3275460240,3275460351,EU
+3275460352,3275460607,IE
+3275460608,3275460863,HK
+3275460864,3275468655,GB
+3275468656,3275468671,IE
+3275468672,3275468735,GB
+3275468736,3275468751,IE
+3275468752,3275468767,GB
+3275468768,3275468799,IE
+3275468800,3275475875,GB
+3275475876,3275475967,EU
+3275475968,3275476223,GB
+3275476224,3275476991,EU
+3275476992,3275477567,GB
+3275477568,3275477759,EU
+3275477760,3275478271,GB
+3275478272,3275478527,EU
+3275478528,3275481087,GB
+3275481088,3275483135,EU
+3275483136,3275483647,GB
+3275483648,3275485183,EU
+3275485184,3275485215,GB
+3275485216,3275485247,EU
+3275485248,3275485375,GB
+3275485376,3275489279,EU
3275489280,3275497471,GB
3275497472,3275505663,DE
3275505664,3275506175,PL
@@ -59102,42 +59862,26 @@
3276451584,3276455935,EU
3276455936,3276464127,BE
3276464128,3276472319,GR
-3276472320,3276473343,EU
-3276473344,3276473855,AT
-3276473856,3276477439,EU
-3276477440,3276477951,CH
-3276477952,3276479999,EU
+3276472320,3276479999,EU
3276480000,3276480511,FR
-3276480512,3276481023,EU
-3276481024,3276481535,RU
-3276481536,3276485631,EU
+3276480512,3276485631,EU
3276485632,3276486655,GB
3276486656,3276493567,EU
3276493568,3276493823,GB
3276493824,3276494335,EU
3276494336,3276494591,GB
-3276494592,3276498431,EU
-3276498432,3276498943,DE
-3276498944,3276502527,EU
-3276502528,3276505087,DE
-3276505088,3276506623,EU
-3276506624,3276507135,ZA
-3276507136,3276508927,EU
+3276494592,3276503039,EU
+3276503040,3276505087,DE
+3276505088,3276508927,EU
3276508928,3276509183,GB
3276509184,3276510207,IT
3276510208,3276512255,EU
3276512256,3276513023,ZA
-3276513024,3276518911,EU
-3276518912,3276519423,BE
-3276519424,3276521983,EU
-3276521984,3276523519,NL
-3276523520,3276529663,EU
-3276529664,3276530175,NL
-3276530176,3276530687,EU
-3276530688,3276532639,NL
-3276532640,3276532640,EU
-3276532641,3276532735,NL
-3276532736,3276534527,EU
+3276513024,3276522495,EU
+3276522496,3276523519,NL
+3276523520,3276530687,EU
+3276530688,3276531711,NL
+3276531712,3276534527,EU
3276534528,3276534783,AU
3276534784,3276537343,EU
3276537344,3276537599,AT
@@ -59198,42 +59942,20 @@
3276731392,3276732415,UA
3276732416,3276733439,DE
3276733440,3276734463,UA
-3276734464,3276735999,EU
-3276736000,3276736511,AT
-3276736512,3276739583,EU
-3276739584,3276740095,CH
-3276740096,3276741631,EU
-3276741632,3276742655,FR
-3276742656,3276744191,EU
-3276744192,3276744703,BE
-3276744704,3276746751,EU
-3276746752,3276748287,CH
-3276748288,3276751359,EU
-3276751360,3276751871,GB
-3276751872,3276752383,EU
-3276752384,3276752895,GB
-3276752896,3276758015,EU
+3276734464,3276746751,EU
+3276746752,3276747775,CH
+3276747776,3276758015,EU
3276758016,3276759039,GB
-3276759040,3276759551,DE
-3276759552,3276760063,EU
+3276759040,3276760063,EU
3276760064,3276761087,DE
-3276761088,3276764671,EU
-3276764672,3276765183,DE
+3276761088,3276765183,EU
3276765184,3276766207,GB
-3276766208,3276770303,EU
-3276770304,3276770815,ES
-3276770816,3276773375,EU
-3276773376,3276773887,DK
-3276773888,3276775423,EU
-3276775424,3276781055,NL
-3276781056,3276781567,EU
+3276766208,3276775423,EU
+3276775424,3276780543,NL
+3276780544,3276781567,EU
3276781568,3276782591,BE
-3276782592,3276783103,EU
-3276783104,3276783615,IT
-3276783616,3276783871,EU
-3276783872,3276784383,FR
-3276784384,3276794367,EU
-3276794368,3276795903,BE
+3276782592,3276794879,EU
+3276794880,3276795903,BE
3276795904,3276797951,AT
3276797952,3276799999,EU
3276800000,3276824575,GB
@@ -59266,7 +59988,10 @@
3276866560,3276866687,GB
3276866688,3276866815,IT
3276866816,3276867071,EU
-3276867072,3276868607,IT
+3276867072,3276867327,GB
+3276867328,3276867583,IT
+3276867584,3276868095,GB
+3276868096,3276868607,IT
3276868608,3276868863,GB
3276868864,3276869119,IT
3276869120,3276870143,GB
@@ -59275,20 +60000,22 @@
3276870656,3276871423,IT
3276871424,3276873983,GB
3276873984,3276874239,ES
-3276874240,3276875263,GB
-3276875264,3276875775,NL
-3276875776,3276881919,GB
-3276881920,3276883199,IT
+3276874240,3276876383,GB
+3276876384,3276876415,NL
+3276876416,3276882431,GB
+3276882432,3276883199,IT
3276883200,3276883711,GB
3276883712,3276883967,IT
-3276883968,3276886783,GB
+3276883968,3276886363,GB
+3276886364,3276886367,DE
+3276886368,3276886783,GB
3276886784,3276887039,DE
3276887040,3276888575,GB
3276888576,3276888831,IT
-3276888832,3276890623,GB
-3276890624,3276891135,IT
-3276891136,3276892159,GB
-3276892160,3276893951,IT
+3276888832,3276892159,GB
+3276892160,3276893183,IT
+3276893184,3276893439,GB
+3276893440,3276893951,IT
3276893952,3276894207,GB
3276894208,3276894463,IT
3276894464,3276895743,GB
@@ -59310,7 +60037,9 @@
3276901888,3276903167,GB
3276903168,3276903679,SE
3276903680,3276907263,GB
-3276907264,3276907775,NL
+3276907264,3276907341,NL
+3276907342,3276907342,EU
+3276907343,3276907775,NL
3276907776,3276908543,GB
3276908544,3276908671,SE
3276908672,3276908687,NL
@@ -59324,9 +60053,7 @@
3276912384,3276912511,IT
3276912512,3276912879,GB
3276912880,3276913151,IT
-3276913152,3276917167,GB
-3276917168,3276917183,ES
-3276917184,3276917231,GB
+3276913152,3276917231,GB
3276917232,3276917247,FR
3276917248,3276917759,GB
3276917760,3276918015,ES
@@ -59398,7 +60125,6 @@
3277184768,3277185023,UA
3277185024,3277185279,SA
3277185280,3277185535,RU
-3277185536,3277185791,DE
3277185792,3277186047,PL
3277186048,3277186303,IT
3277186304,3277186559,DE
@@ -59428,7 +60154,8 @@
3277193216,3277258751,NL
3277258752,3277324287,TR
3277324288,3277324799,RU
-3277324800,3277325311,KZ
+3277324800,3277325055,KZ
+3277325056,3277325311,RU
3277325312,3277326335,IT
3277326336,3277326847,GB
3277326848,3277327359,AT
@@ -59438,7 +60165,6 @@
3277328896,3277329407,NL
3277329408,3277329919,GB
3277329920,3277330431,RU
-3277330432,3277330943,RO
3277330944,3277331455,UA
3277331456,3277332479,PL
3277332480,3277332991,NL
@@ -59540,18 +60266,46 @@
3277388544,3277388799,HU
3277388800,3277389311,RU
3277389312,3277389823,AM
-3277389824,3277399295,GB
+3277389824,3277394943,GB
+3277394944,3277395455,US
+3277395456,3277399295,GB
3277399296,3277399311,BE
3277399312,3277399359,GB
3277399360,3277399551,BE
-3277399552,3277403135,GB
-3277403136,3277403647,FR
-3277403648,3277404159,ES
-3277404160,3277455359,GB
+3277399552,3277402591,GB
+3277402592,3277402607,ES
+3277402608,3277403135,GB
+3277403136,3277403215,FR
+3277403216,3277403231,GB
+3277403232,3277403247,FR
+3277403248,3277403263,GB
+3277403264,3277403295,FR
+3277403296,3277403423,GB
+3277403424,3277403439,FR
+3277403440,3277403647,GB
+3277403648,3277403807,ES
+3277403808,3277404159,GB
+3277404160,3277404287,DE
+3277404288,3277404303,GB
+3277404304,3277404319,DE
+3277404320,3277404415,GB
+3277404416,3277404463,IT
+3277404464,3277404495,GB
+3277404496,3277404511,IT
+3277404512,3277404543,GB
+3277404544,3277404559,IT
+3277404560,3277404591,GB
+3277404592,3277404607,IT
+3277404608,3277404671,GB
+3277404672,3277404719,CH
+3277404720,3277405183,GB
+3277405184,3277405263,SE
+3277405264,3277452639,GB
+3277452640,3277452647,IE
+3277452648,3277452655,DK
+3277452656,3277455359,GB
3277455360,3277463551,DE
-3277463552,3277464063,US
-3277464064,3277464575,FR
-3277464576,3277471743,US
+3277463552,3277471743,US
3277471744,3277474815,NL
3277474816,3277475711,BE
3277475712,3277476607,NL
@@ -59748,16 +60502,10 @@
3278020608,3278028799,RU
3278028800,3278036991,DE
3278036992,3278045183,FR
-3278045184,3278054911,GB
-3278054912,3278055423,NL
-3278055424,3278061567,GB
+3278045184,3278061567,GB
3278061568,3278065663,NL
3278065664,3278110719,GB
-3278110720,3278115839,SE
-3278115840,3278116351,ES
-3278116352,3278125055,SE
-3278125056,3278125567,NL
-3278125568,3278176255,SE
+3278110720,3278176255,SE
3278176256,3278221091,FR
3278221092,3278221093,GB
3278221094,3278241791,FR
@@ -59808,7 +60556,9 @@
3278913536,3278921727,CH
3278921728,3278929919,RU
3278929920,3278938111,TR
-3278938112,3278941295,DE
+3278938112,3278940355,DE
+3278940356,3278940359,NL
+3278940360,3278941295,DE
3278941296,3278941299,US
3278941300,3278943949,DE
3278943950,3278943950,BE
@@ -59906,91 +60656,37 @@
3279123456,3279123711,RE
3279123712,3279159295,FR
3279159296,3279290367,PL
-3279290368,3279290879,EU
-3279290880,3279291391,NL
-3279291392,3279291903,EU
-3279291904,3279294463,NL
-3279294464,3279295999,EU
-3279296000,3279296511,ZA
-3279296512,3279297023,ES
-3279297024,3279297535,EU
-3279297536,3279298047,SE
-3279298048,3279298559,ZA
-3279298560,3279299071,DE
-3279299072,3279299583,EU
-3279299584,3279300095,DE
-3279300096,3279301631,EU
+3279290368,3279292415,EU
+3279292416,3279294463,NL
+3279294464,3279301631,EU
3279301632,3279304703,DE
-3279304704,3279305727,EU
-3279305728,3279306751,DE
-3279306752,3279307263,EU
-3279307264,3279307775,FR
-3279307776,3279308287,EU
-3279308288,3279308799,FR
-3279308800,3279309311,EU
-3279309312,3279310335,FR
-3279310336,3279310847,EU
+3279304704,3279310847,EU
3279310848,3279311871,DE
-3279311872,3279316479,EU
-3279316480,3279317503,IT
-3279317504,3279320063,EU
+3279311872,3279320063,EU
3279320064,3279321087,FR
-3279321088,3279321599,EU
-3279321600,3279322111,DK
-3279322112,3279323391,EU
-3279323392,3279323903,GB
-3279323904,3279324671,EU
-3279324672,3279325183,GB
-3279325184,3279326719,EU
-3279326720,3279329279,GB
+3279321088,3279327231,EU
+3279327232,3279329279,GB
3279329280,3279331327,EU
-3279331328,3279332863,GB
-3279332864,3279334399,EU
-3279334400,3279334911,GB
-3279334912,3279335935,EU
-3279335936,3279339519,GB
-3279339520,3279340031,EU
-3279340032,3279340543,IT
-3279340544,3279341055,EU
-3279341056,3279341567,IT
-3279341568,3279345151,EU
-3279345152,3279345663,SE
-3279345664,3279346687,GB
-3279346688,3279347199,EU
-3279347200,3279347711,FR
-3279347712,3279348223,SE
-3279348224,3279349759,EU
-3279349760,3279350783,DE
-3279350784,3279351295,EU
-3279351296,3279351807,GB
-3279351808,3279352319,DK
-3279352320,3279353343,EU
-3279353344,3279354879,DK
-3279354880,3279355391,AT
-3279355392,3279373311,EU
+3279331328,3279332351,GB
+3279332352,3279337471,EU
+3279337472,3279339519,GB
+3279339520,3279343871,EU
+3279343872,3279344127,BE
+3279344128,3279353855,EU
+3279353856,3279354879,DK
+3279354880,3279373311,EU
3279373312,3279374335,FI
3279374336,3279374591,EU
3279374592,3279375359,FI
-3279375360,3279380479,EU
-3279380480,3279380991,CH
-3279380992,3279383295,EU
-3279383296,3279383807,CH
-3279383808,3279384319,EU
-3279384320,3279384831,CH
-3279384832,3279421439,EU
+3279375360,3279421439,EU
3279421440,3279486975,IT
3279486976,3279552511,NL
3279552512,3279560703,LV
3279560704,3279568895,GB
3279568896,3279577087,IT
3279577088,3279585279,BE
-3279585280,3279585791,DE
-3279585792,3279586815,GB
-3279586816,3279587327,DE
-3279587328,3279589375,GB
-3279589376,3279589887,DE
-3279589888,3279593983,GB
-3279593984,3279594495,DE
+3279585280,3279594239,GB
+3279594240,3279594495,DE
3279594496,3279596543,GB
3279596544,3279597311,DE
3279597312,3279598591,GB
@@ -60074,17 +60770,9 @@
3280009728,3280010239,GB
3280010240,3280010751,UA
3280010752,3280011263,TR
-3280011264,3280015871,EU
-3280015872,3280016383,GB
-3280016384,3280017919,EU
-3280017920,3280018431,IT
-3280018432,3280019967,EU
-3280019968,3280020479,CH
-3280020480,3280023551,EU
+3280011264,3280023551,EU
3280023552,3280024575,IT
-3280024576,3280037887,EU
-3280037888,3280038399,CH
-3280038400,3280076799,EU
+3280024576,3280076799,EU
3280076800,3280084991,GB
3280084992,3280093183,BA
3280093184,3280109567,GR
@@ -60249,9 +60937,7 @@
3280658176,3280658431,DE
3280658432,3280660479,MT
3280660480,3280662527,RU
-3280662528,3280662783,DE
-3280662784,3280663295,CZ
-3280663296,3280666623,DE
+3280662528,3280666623,DE
3280666624,3280732159,NO
3280732160,3280764927,DE
3280764928,3280765951,TJ
@@ -60292,11 +60978,11 @@
3280933366,3280933366,DE
3280933367,3280934911,GB
3280934912,3280936959,DE
-3280936960,3280956415,GB
-3280956416,3280956927,DE
-3280956928,3280991231,GB
-3280991232,3280991743,DE
-3280991744,3280994559,GB
+3280936960,3280955709,GB
+3280955710,3280955713,DE
+3280955714,3280991231,GB
+3280991232,3280991487,DE
+3280991488,3280994559,GB
3280994560,3280994815,RU
3280994816,3280995071,NL
3280995072,3280995327,DE
@@ -60329,16 +61015,28 @@
3281010688,3281018879,BE
3281018880,3281027071,CZ
3281027072,3281027327,GB
-3281027328,3281027775,EU
-3281027776,3281027791,GB
-3281027792,3281028095,EU
-3281028096,3281028159,GB
-3281028160,3281030399,EU
+3281027328,3281027583,EU
+3281027584,3281027615,GB
+3281027616,3281027631,EU
+3281027632,3281027679,GB
+3281027680,3281027695,EU
+3281027696,3281027743,GB
+3281027744,3281027775,EU
+3281027776,3281027807,GB
+3281027808,3281027839,EU
+3281027840,3281027903,GB
+3281027904,3281028063,EU
+3281028064,3281028159,GB
+3281028160,3281028991,EU
+3281028992,3281029055,GB
+3281029056,3281030399,EU
3281030400,3281035263,GB
3281035264,3281043455,CH
3281043456,3281059839,RU
3281059840,3281062911,DE
-3281062912,3281063167,EU
+3281062912,3281063039,EU
+3281063040,3281063111,DE
+3281063112,3281063167,EU
3281063168,3281125375,DE
3281125376,3281133567,SK
3281133568,3281141759,IR
@@ -60430,7 +61128,7 @@
3281969152,3281969663,RU
3281969664,3281970175,PL
3281970176,3281970687,RU
-3281970688,3281971199,LI
+3281970688,3281971199,CH
3281971200,3281971711,RU
3281971712,3281972223,RO
3281972224,3281972735,DE
@@ -60533,7 +61231,6 @@
3282739712,3282739967,FR
3282739968,3282740223,IR
3282740224,3282740479,FR
-3282740480,3282740735,AT
3282740736,3282740991,BG
3282740992,3282741247,DE
3282741248,3282741503,PT
@@ -60683,7 +61380,6 @@
3283493120,3283493375,IL
3283493376,3283493887,PL
3283493888,3283494143,DK
-3283494144,3283494399,GB
3283494400,3283494655,PL
3283494656,3283494911,DK
3283494912,3283495167,PL
@@ -60728,47 +61424,19 @@
3283540992,3283541503,RO
3283541504,3283542015,CH
3283542016,3283550207,IT
-3283550208,3283551231,EU
-3283551232,3283552255,AT
-3283552256,3283554815,EU
-3283554816,3283555327,CH
-3283555328,3283561471,EU
+3283550208,3283561471,EU
3283561472,3283562495,GB
3283562496,3283563519,EU
-3283563520,3283565055,GB
-3283565056,3283566079,EU
-3283566080,3283566591,GB
-3283566592,3283568639,EU
+3283563520,3283564543,GB
+3283564544,3283568639,EU
3283568640,3283569663,GB
3283569664,3283570687,EU
3283570688,3283570943,GB
-3283570944,3283573247,EU
-3283573248,3283574271,GB
-3283574272,3283575807,EU
-3283575808,3283576319,DE
-3283576320,3283576831,EU
+3283570944,3283576831,EU
3283576832,3283579903,DE
-3283579904,3283582463,EU
-3283582464,3283582975,DE
-3283582976,3283591679,EU
-3283591680,3283592191,DE
-3283592192,3283592703,CH
-3283592704,3283593215,EU
+3283579904,3283593215,EU
3283593216,3283595263,IT
-3283595264,3283595775,DE
-3283595776,3283597311,EU
-3283597312,3283597823,GB
-3283597824,3283603455,EU
-3283603456,3283603967,GB
-3283603968,3283607551,EU
-3283607552,3283608575,BE
-3283608576,3283609087,EU
-3283609088,3283609599,DE
-3283609600,3283610111,EU
-3283610112,3283610623,DE
-3283610624,3283612159,EU
-3283612160,3283612671,IT
-3283612672,3283615743,EU
+3283595264,3283615743,EU
3283615744,3283623935,HU
3283623936,3283632127,DK
3283632128,3283632639,NL
@@ -60786,9 +61454,7 @@
3283639296,3283639807,CH
3283639808,3283640319,DE
3283640320,3283648511,DK
-3283648512,3283650047,BE
-3283650048,3283650559,DE
-3283650560,3283650927,BE
+3283648512,3283650927,BE
3283650928,3283650943,GB
3283650944,3283650975,BE
3283650976,3283651007,GB
@@ -60838,7 +61504,7 @@
3283977728,3283978751,RU
3283978752,3283979263,RO
3283979264,3283979775,IL
-3283979776,3283980287,EU
+3283979776,3283980287,NO
3283980288,3283980799,RO
3283980800,3283981823,CH
3283981824,3283983359,RO
@@ -60999,7 +61665,7 @@
3284099328,3284099583,HU
3284099584,3284100095,GR
3284100096,3284100607,AM
-3284100608,3284101119,US
+3284100608,3284101119,EU
3284101120,3284101631,UA
3284101632,3284102143,GB
3284102144,3284102399,DK
@@ -61092,7 +61758,7 @@
3284684288,3284684799,FR
3284684800,3284685311,DE
3284685312,3284685823,NL
-3284685824,3284686335,DE
+3284685824,3284686335,US
3284686336,3284686847,RO
3284686848,3284687359,PL
3284687360,3284687871,UA
@@ -61165,7 +61831,6 @@
3285076480,3285076735,EU
3285076736,3285082111,NL
3285082112,3285084159,AT
-3285084160,3285085183,LU
3285085184,3285086207,GB
3285086208,3285088255,PL
3285088256,3285088511,RO
@@ -61176,7 +61841,7 @@
3285098496,3285114879,GB
3285114880,3285115903,RU
3285115904,3285116415,PL
-3285116416,3285116927,RU
+3285116416,3285116927,CZ
3285116928,3285117439,UA
3285117440,3285117951,RU
3285117952,3285118463,FR
@@ -61275,39 +61940,16 @@
3285454080,3285454335,GB
3285454336,3285457919,EU
3285457920,3285458175,GB
-3285458176,3285458431,EU
-3285458432,3285458943,GB
-3285458944,3285459967,EU
-3285459968,3285460479,FI
-3285460480,3285460991,DK
-3285460992,3285464575,EU
-3285464576,3285465087,BE
-3285465088,3285468671,EU
-3285468672,3285469183,DE
-3285469184,3285470207,EU
-3285470208,3285470719,DE
-3285470720,3285471231,EU
-3285471232,3285471743,DE
-3285471744,3285471999,EU
+3285458176,3285459967,EU
+3285459968,3285460223,FI
+3285460224,3285471999,EU
3285472000,3285472255,DE
3285472256,3285472511,US
3285472512,3285476029,EU
3285476030,3285476030,AT
3285476031,3285480959,EU
3285480960,3285481215,CH
-3285481216,3285484543,EU
-3285484544,3285485055,IE
-3285485056,3285486591,EU
-3285486592,3285487103,IT
-3285487104,3285489151,EU
-3285489152,3285489663,GB
-3285489664,3285494271,EU
-3285494272,3285494783,IT
-3285494784,3285495807,EU
-3285495808,3285496319,DE
-3285496320,3285497343,EU
-3285497344,3285497855,DE
-3285497856,3285498623,EU
+3285481216,3285498623,EU
3285498624,3285498879,CH
3285498880,3285501727,EU
3285501728,3285501759,GB
@@ -61316,7 +61958,9 @@
3285501846,3285510143,EU
3285510144,3285512191,GB
3285512192,3285516287,EU
-3285516288,3285517311,BE
+3285516288,3285516687,BE
+3285516688,3285516691,NL
+3285516692,3285517311,BE
3285517312,3285518335,GB
3285518336,3285524223,BE
3285524224,3285524351,GB
@@ -61336,7 +61980,9 @@
3285546688,3285546751,GB
3285546752,3285550335,BE
3285550336,3285550463,GB
-3285550464,3285567487,BE
+3285550464,3285561087,BE
+3285561088,3285561103,SE
+3285561104,3285567487,BE
3285567488,3285568511,NL
3285568512,3285581823,BE
3285581824,3285606399,DE
@@ -61367,7 +62013,7 @@
3285765120,3285766143,UA
3285766144,3285766655,DE
3285766656,3285767679,UA
-3285767680,3285768191,EU
+3285767680,3285768191,FR
3285768192,3285768703,RU
3285768704,3285768959,RO
3285768960,3285769215,PL
@@ -61413,15 +62059,15 @@
3285876736,3285909503,RU
3285909504,3285910335,EU
3285910336,3285910399,ES
-3285910400,3285919743,EU
+3285910400,3285911559,EU
+3285911560,3285911567,GB
+3285911568,3285917695,EU
+3285917696,3285917703,GB
+3285917704,3285919743,EU
3285919744,3285921791,QA
3285921792,3285922047,EU
3285922048,3285922303,FR
-3285922304,3285922815,EU
-3285922816,3285923327,KW
-3285923328,3285928447,EU
-3285928448,3285928959,ES
-3285928960,3285934591,EU
+3285922304,3285934591,EU
3285934592,3285934847,ES
3285934848,3285935103,GB
3285935104,3285935871,EU
@@ -61434,16 +62080,13 @@
3285939184,3285939191,GB
3285939192,3285939743,EU
3285939744,3285939759,GB
-3285939760,3285940735,EU
-3285940736,3285941247,GB
-3285941248,3285943551,EU
+3285939760,3285939839,EU
+3285939840,3285939967,GB
+3285939968,3285943551,EU
3285943552,3285943647,GB
3285943648,3285943679,NG
3285943680,3285943807,GB
-3285943808,3285944319,EU
-3285944320,3285944831,US
-3285944832,3285945343,DK
-3285945344,3285946111,EU
+3285943808,3285946111,EU
3285946112,3285946367,ES
3285946368,3285951487,EU
3285951488,3285951743,GB
@@ -61451,9 +62094,7 @@
3285953536,3285954047,PK
3285954048,3285962751,EU
3285962752,3285963775,DE
-3285963776,3285964799,EU
-3285964800,3285966335,GB
-3285966336,3285975039,EU
+3285963776,3285975039,EU
3285975040,3286013695,FR
3286013696,3286013951,RE
3286013952,3286106111,FR
@@ -61488,7 +62129,7 @@
3286317056,3286317567,RU
3286317568,3286318079,RO
3286318080,3286318591,CH
-3286318592,3286319103,A2
+3286318592,3286319103,EU
3286319104,3286320127,RO
3286320128,3286321151,PL
3286321152,3286322175,CZ
@@ -61580,9 +62221,7 @@
3286499328,3286564863,HU
3286564864,3286566655,AE
3286566656,3286567423,KW
-3286567424,3286571007,AE
-3286571008,3286571519,KW
-3286571520,3286630399,AE
+3286567424,3286630399,AE
3286630400,3286638591,BG
3286638592,3286646783,AT
3286646784,3286654975,RU
@@ -61625,10 +62264,7 @@
3286773760,3286777855,DE
3286777856,3286778111,GB
3286778112,3286781951,FR
-3286781952,3286789119,GB
-3286789120,3286789631,DE
-3286789632,3286790143,FR
-3286790144,3286794239,GB
+3286781952,3286794239,GB
3286794240,3286888447,DE
3286888448,3286889471,IE
3286889472,3286892543,DE
@@ -61723,7 +62359,6 @@
3286934784,3286935039,TR
3286935040,3286935551,ES
3286935552,3286935807,EG
-3286935808,3286936063,RO
3286936064,3286936319,RU
3286936320,3286936575,IT
3286936576,3286936831,RO
@@ -61799,7 +62434,6 @@
3287180288,3287181311,RU
3287181312,3287182335,UZ
3287182336,3287185407,UA
-3287185408,3287186431,SE
3287186432,3287187455,FI
3287187456,3287196671,DE
3287196672,3287198719,PL
@@ -61859,8 +62493,7 @@
3287443968,3287444479,BG
3287444480,3287444991,PL
3287444992,3287445503,DE
-3287445504,3287446015,GB
-3287446016,3287446527,UA
+3287445504,3287446527,UA
3287446528,3287447039,PL
3287447040,3287447551,IL
3287447552,3287448063,DK
@@ -61952,7 +62585,7 @@
3287632384,3287632895,SE
3287632896,3287633407,RU
3287633408,3287633919,SK
-3287633920,3287634431,GB
+3287633920,3287634431,UA
3287634432,3287634943,RO
3287634944,3287635455,PL
3287635456,3287635967,DE
@@ -61965,7 +62598,7 @@
3287639552,3287640063,RU
3287640064,3287640575,PL
3287640576,3287641087,SI
-3287641088,3287641599,A2
+3287641088,3287641599,EU
3287641600,3287642111,FI
3287642112,3287642623,UA
3287642624,3287643135,BE
@@ -62073,7 +62706,7 @@
3287736832,3287737343,LV
3287737344,3287737855,GB
3287737856,3287738367,FR
-3287738368,3287738879,CH
+3287738368,3287738879,GB
3287738880,3287739391,DE
3287739392,3287739903,NL
3287739904,3287740415,PT
@@ -62122,7 +62755,21 @@
3287834624,3287842815,GB
3287842816,3287851007,DE
3287851008,3287859199,UA
-3287859200,3287867391,EU
+3287859200,3287859455,GB
+3287859456,3287859711,FK
+3287859712,3287859967,EU
+3287859968,3287860479,GB
+3287860480,3287861247,EU
+3287861248,3287862015,GB
+3287862016,3287863807,EU
+3287863808,3287864063,GB
+3287864064,3287866383,EU
+3287866384,3287866439,GB
+3287866440,3287866495,EU
+3287866496,3287866591,GB
+3287866592,3287866607,EU
+3287866608,3287866623,GB
+3287866624,3287867391,EU
3287867392,3287867903,UA
3287867904,3287868415,PL
3287868416,3287868927,RO
@@ -62177,9 +62824,7 @@
3288006656,3288072191,GR
3288072192,3288088575,SE
3288088576,3288104959,RS
-3288104960,3288151039,DE
-3288151040,3288151551,NL
-3288151552,3288236031,DE
+3288104960,3288236031,DE
3288236032,3288236543,LI
3288236544,3288237055,FR
3288237056,3288238591,RO
@@ -62239,7 +62884,7 @@
3288428544,3288428799,CU
3288428800,3288429311,IN
3288429312,3288429567,ZA
-3288429568,3288430335,GH
+3288430080,3288430335,GH
3288430336,3288430591,EG
3288430592,3288432639,SC
3288432640,3288433407,ZA
@@ -62330,10 +62975,12 @@
3288727808,3288753919,ZA
3288753920,3288754175,NG
3288758272,3288758527,EG
-3288758528,3288772607,ZA
+3288758528,3288772095,ZA
+3288772096,3288772607,MU
3288774656,3288774911,ZA
3288774912,3288775167,EG
3288775168,3288777727,NG
+3288777728,3288778239,TZ
3288778240,3288778495,ZA
3288778496,3288778751,MU
3288778752,3288779007,EG
@@ -62345,24 +62992,31 @@
3288783872,3288784127,KE
3288784128,3288784895,ZA
3288787968,3288788223,EG
-3288788224,3288788479,ZA
-3288788992,3288792831,ZA
+3288788224,3288792831,ZA
3288792832,3288793087,AO
-3288793088,3289002751,ZA
-3289002752,3289003007,TZ
+3288793088,3289003007,ZA
3289005056,3289005311,TZ
3289005312,3289014527,ZA
3289014528,3289014783,EG
3289014784,3289015295,ZA
3289015296,3289015551,CM
-3289015552,3289044991,ZA
+3289015552,3289020159,ZA
+3289020160,3289020415,UG
+3289020416,3289020671,EG
+3289020672,3289020927,ZA
+3289021440,3289024767,ZA
+3289025024,3289025535,UG
+3289026048,3289027327,ZA
+3289027328,3289027583,TZ
+3289027584,3289041407,ZA
+3289041408,3289041663,NG
+3289041664,3289044991,ZA
3289044992,3289047039,ML
-3289047040,3289063423,ZA
-3289069568,3289070335,ZA
-3289070336,3289070591,ZW
-3289070592,3289070847,NA
-3289070848,3289071103,ZA
-3289071616,3289086975,ZA
+3289047040,3289048063,ZA
+3289048064,3289048319,UG
+3289048320,3289048831,ZA
+3289048832,3289049087,NG
+3289049088,3289086975,ZA
3289086976,3289087231,SZ
3289087232,3289120767,ZA
3289120768,3289123327,PR
@@ -62412,8 +63066,7 @@
3290031360,3290060287,ZA
3290060288,3290060543,SZ
3290060544,3290103807,ZA
-3290103808,3290104319,JO
-3290104320,3290104831,EG
+3290103808,3290104831,US
3290104832,3290106879,VE
3290106880,3290116095,US
3290116096,3290118143,PE
@@ -62424,7 +63077,7 @@
3290169344,3290171135,ZA
3290171136,3290171391,SZ
3290171392,3290171647,ZA
-3290171904,3290172159,NG
+3290171904,3290172159,ZA
3290172160,3290172415,KE
3290172416,3290181631,ZA
3290181632,3290185727,PR
@@ -62469,11 +63122,10 @@
3290980352,3290984447,ZA
3290988544,3290992639,KE
3290992640,3290996735,GH
+3290996736,3291000831,NG
3291004928,3291021311,NG
3291021312,3291029503,ZA
-3291029504,3291033343,TZ
-3291033344,3291033599,KE
-3291033600,3291037695,TZ
+3291029504,3291037695,TZ
3291045888,3291078655,ZA
3291078656,3291086847,DZ
3291086848,3291103231,PR
@@ -62554,9 +63206,7 @@
3291326464,3291330559,ZA
3291330560,3291331583,TZ
3291331584,3291332607,MW
-3291332608,3291332615,ZA
-3291332616,3291332863,NG
-3291332864,3291348991,ZA
+3291332608,3291348991,ZA
3291348992,3291353087,MZ
3291353088,3291353343,KE
3291353344,3291353599,EG
@@ -62594,335 +63244,32 @@
3291408384,3291410431,GM
3291410432,3291412479,NG
3291412480,3291414527,DZ
-3291414528,3291432191,ZA
-3291432192,3291432447,NA
-3291432448,3291432703,ZA
+3291414528,3291432703,ZA
3291432704,3291432959,NA
-3291432960,3291433215,ZA
-3291433216,3291433727,NA
-3291433728,3291434239,ZA
+3291432960,3291434239,ZA
3291434240,3291434751,A2
3291434752,3291435007,ZA
3291435008,3291439103,A2
+3291439104,3291447295,NG
3291447296,3291463679,CI
3291480064,3291484159,SC
-3291484160,3291486463,DE
-3291486464,3291486719,US
-3291486720,3291488255,DE
-3291488256,3291488511,US
-3291488512,3291492351,SC
-3291492352,3291492607,US
-3291492608,3291496447,SC
+3291484160,3291488255,DE
+3291488256,3291496447,SC
3291496448,3291504639,US
-3291504640,3291506431,SC
-3291506432,3291506687,US
-3291506688,3291510015,SC
-3291510016,3291510527,US
-3291510528,3291522559,SC
-3291522560,3291522815,US
-3291522816,3291529215,SC
+3291504640,3291529215,SC
3291529216,3291533311,US
3291533312,3291535359,SC
3291535360,3291537407,US
-3291537408,3291539711,SC
-3291539712,3291539967,US
-3291539968,3291540479,SC
-3291540480,3291540735,US
-3291540736,3291545599,SC
+3291537408,3291545599,SC
3291742208,3292004351,US
-3292004352,3292004863,SC
-3292004864,3292005119,US
-3292005120,3292008191,SC
-3292008192,3292008447,US
-3292008448,3292008959,SC
-3292008960,3292009471,US
-3292009472,3292011519,SC
-3292011520,3292011775,US
-3292011776,3292013055,SC
-3292013056,3292013311,US
-3292013312,3292017151,SC
-3292017152,3292017407,US
-3292017408,3292018431,SC
-3292018432,3292018943,US
-3292018944,3292020479,SC
-3292020480,3292020735,US
-3292020736,3292021247,SC
-3292021248,3292021503,US
-3292021504,3292023039,SC
-3292023040,3292023295,US
-3292023296,3292024063,SC
-3292024064,3292024319,US
-3292024320,3292025855,SC
-3292025856,3292026367,US
-3292026368,3292026879,SC
-3292026880,3292027391,US
-3292027392,3292027647,SC
-3292027648,3292027903,US
-3292027904,3292030975,SC
-3292030976,3292031231,US
-3292031232,3292031487,SC
-3292031488,3292031743,US
-3292031744,3292033023,SC
-3292033024,3292033279,US
-3292033280,3292035071,SC
-3292035072,3292035327,US
-3292035328,3292037375,SC
-3292037376,3292037631,US
-3292037632,3292039679,SC
-3292039680,3292039935,US
-3292039936,3292043007,SC
-3292043008,3292043519,US
-3292043520,3292045567,SC
-3292045568,3292045823,US
-3292045824,3292046079,SC
-3292046080,3292046335,US
-3292046336,3292047871,SC
-3292047872,3292048639,US
-3292048640,3292050687,SC
-3292050688,3292050943,US
-3292050944,3292059391,SC
-3292059392,3292059647,US
-3292059648,3292062207,SC
-3292062208,3292062719,US
-3292062720,3292062975,SC
-3292062976,3292063231,US
-3292063232,3292066303,SC
-3292066304,3292066559,US
-3292066560,3292068095,SC
-3292068096,3292068351,US
-3292068352,3292071935,SC
-3292071936,3292072191,US
-3292072192,3292072959,SC
-3292072960,3292073215,US
-3292073216,3292079103,SC
-3292079104,3292079359,US
-3292079360,3292080895,SC
-3292080896,3292081151,US
-3292081152,3292084735,SC
-3292084736,3292084991,US
-3292084992,3292088063,SC
-3292088064,3292088319,US
-3292088320,3292090367,SC
-3292090368,3292090623,US
-3292090624,3292094719,SC
-3292094720,3292094975,US
-3292094976,3292095999,SC
-3292096000,3292096255,US
-3292096256,3292097535,SC
-3292097536,3292097791,US
-3292097792,3292098815,SC
-3292098816,3292099071,US
-3292099072,3292102399,SC
-3292102400,3292102655,US
-3292102656,3292103167,SC
-3292103168,3292103423,US
-3292103424,3292103935,SC
-3292103936,3292104191,US
-3292104192,3292105215,SC
-3292105216,3292105471,US
-3292105472,3292110335,SC
-3292110336,3292110591,US
-3292110592,3292110847,SC
-3292110848,3292111103,US
-3292111104,3292112639,SC
-3292112640,3292112895,US
-3292112896,3292114687,SC
-3292114688,3292114943,US
-3292114944,3292115455,SC
-3292115456,3292115711,US
-3292115712,3292117503,SC
-3292117504,3292117759,US
-3292117760,3292118271,SC
-3292118272,3292118527,US
-3292118528,3292119295,SC
-3292119296,3292119551,US
-3292119552,3292121087,SC
-3292121088,3292121343,US
-3292121344,3292122111,SC
-3292122112,3292122879,US
-3292122880,3292128511,SC
-3292128512,3292128767,US
-3292128768,3292131583,SC
-3292131584,3292131839,US
-3292131840,3292133119,SC
-3292133120,3292133375,US
-3292133376,3292134143,SC
-3292134144,3292134399,US
-3292134400,3292134655,SC
-3292134656,3292134911,US
-3292134912,3292137983,SC
-3292137984,3292138239,US
-3292138240,3292138751,SC
-3292138752,3292139007,US
-3292139008,3292141311,SC
-3292141312,3292141567,US
-3292141568,3292143103,SC
-3292143104,3292143359,US
-3292143360,3292151551,SC
-3292151552,3292151807,US
-3292151808,3292153343,SC
-3292153344,3292153599,US
-3292153600,3292154367,SC
-3292154368,3292154623,US
-3292154624,3292162559,SC
-3292162560,3292162815,US
-3292162816,3292163583,SC
-3292163584,3292163839,US
-3292163840,3292164351,SC
-3292164352,3292164607,US
-3292164608,3292165119,SC
-3292165120,3292165375,US
-3292165376,3292166143,SC
-3292166144,3292166399,US
-3292166400,3292169215,SC
-3292169216,3292169727,US
-3292169728,3292172031,SC
-3292172032,3292172543,US
-3292172544,3292174335,SC
-3292174336,3292174591,US
-3292174592,3292175615,SC
-3292175616,3292175871,US
-3292175872,3292180479,SC
-3292180480,3292180735,US
-3292180736,3292181759,SC
-3292181760,3292182015,US
-3292182016,3292184063,SC
-3292184064,3292184319,US
-3292184320,3292185599,SC
-3292185600,3292185855,US
-3292185856,3292187135,SC
-3292187136,3292187391,US
-3292187392,3292188159,SC
-3292188160,3292188415,US
-3292188416,3292190207,SC
-3292190208,3292190463,US
-3292190464,3292190719,SC
-3292190720,3292190975,US
-3292190976,3292193279,SC
-3292193280,3292193791,US
-3292193792,3292196863,SC
-3292196864,3292197119,US
-3292197120,3292198399,SC
-3292198400,3292198655,US
-3292198656,3292199167,SC
-3292199168,3292199423,US
-3292199424,3292199679,SC
-3292199680,3292200191,US
-3292200192,3292200959,SC
-3292200960,3292201215,SE
-3292201216,3292201727,SC
-3292201728,3292201983,US
-3292201984,3292202751,SC
-3292202752,3292203007,US
-3292203008,3292203263,SC
-3292203264,3292203519,US
-3292203520,3292205311,SC
-3292205312,3292205567,US
-3292205568,3292209151,SC
-3292209152,3292209663,US
-3292209664,3292212479,SC
-3292212480,3292212735,US
-3292212736,3292213503,SC
-3292213504,3292214015,US
-3292214016,3292216575,SC
-3292216576,3292217087,US
-3292217088,3292217599,SC
-3292217600,3292217855,US
-3292217856,3292220671,SC
-3292220672,3292220927,US
-3292220928,3292221695,SC
-3292221696,3292221951,US
-3292221952,3292226047,SC
-3292226048,3292226303,US
-3292226304,3292227327,SC
-3292227328,3292227583,US
-3292227584,3292234495,SC
-3292234496,3292234751,US
-3292234752,3292236543,SC
-3292236544,3292236799,US
-3292236800,3292239103,SC
-3292239104,3292239359,US
-3292239360,3292242175,SC
-3292242176,3292242431,US
-3292242432,3292243967,SC
-3292243968,3292244223,US
-3292244224,3292248063,SC
-3292248064,3292248319,US
-3292248320,3292251647,SC
-3292251648,3292251903,US
-3292251904,3292254975,SC
-3292254976,3292255231,US
-3292255232,3292259839,SC
-3292259840,3292260351,US
-3292260352,3292261375,SC
-3292261376,3292261631,US
-3292261632,3292262655,SC
-3292262656,3292262911,US
-3292262912,3292263423,SC
-3292263424,3292263679,US
-3292263680,3292265471,SC
-3292265472,3292265983,US
-3292265984,3292266239,DE
-3292266240,3292266495,SC
+3292004352,3292266495,SC
3292397568,3292528639,ZA
3300917248,3300921343,MU
3300925440,3300929535,MG
3300933632,3300950015,MU
3300982784,3301175295,ZA
3301175296,3301179391,AF
-3301179392,3301181183,SC
-3301181184,3301181439,US
-3301181440,3301183743,SC
-3301183744,3301183999,US
-3301184000,3301188351,SC
-3301188352,3301188607,US
-3301188608,3301188863,SC
-3301188864,3301189119,US
-3301189120,3301189375,SC
-3301189376,3301189631,US
-3301189632,3301191167,SC
-3301191168,3301191423,US
-3301191424,3301191935,SC
-3301191936,3301192191,US
-3301192192,3301193727,SC
-3301193728,3301193983,US
-3301193984,3301197567,SC
-3301197568,3301197823,US
-3301197824,3301199359,SC
-3301199360,3301199615,US
-3301199616,3301205759,SC
-3301205760,3301206015,US
-3301206016,3301210623,SC
-3301210624,3301210879,US
-3301210880,3301213695,SC
-3301213696,3301213951,US
-3301213952,3301217535,SC
-3301217536,3301217791,US
-3301217792,3301219327,SC
-3301219328,3301219583,US
-3301219584,3301220863,SC
-3301220864,3301221119,US
-3301221120,3301221887,SC
-3301221888,3301222143,US
-3301222144,3301222911,SC
-3301222912,3301223167,US
-3301223168,3301224959,SC
-3301224960,3301225215,US
-3301225216,3301228543,SC
-3301228544,3301228799,US
-3301228800,3301230591,SC
-3301230592,3301230847,US
-3301230848,3301234687,SC
-3301234688,3301234943,US
-3301234944,3301236991,SC
-3301236992,3301237247,US
-3301237248,3301238527,SC
-3301238528,3301238783,US
-3301238784,3301241343,SC
-3301241344,3301241599,US
-3301241600,3301243647,SC
-3301243648,3301243903,US
-3301243904,3301311487,SC
+3301179392,3301311487,SC
3301311488,3301313535,SA
3301313536,3301318655,SC
3301318656,3301322751,DE
@@ -62935,65 +63282,7 @@
3301355520,3301365759,SE
3301365760,3301367807,SC
3301367808,3301371903,SE
-3301371904,3301383679,SC
-3301383680,3301383935,US
-3301383936,3301384703,SC
-3301384704,3301384959,US
-3301384960,3301387007,SC
-3301387008,3301387263,US
-3301387264,3301393151,SC
-3301393152,3301393663,US
-3301393664,3301393919,SC
-3301393920,3301394175,US
-3301394176,3301394431,SC
-3301394432,3301394687,US
-3301394688,3301397503,SC
-3301397504,3301397759,US
-3301397760,3301399295,SC
-3301399296,3301399551,US
-3301399552,3301403135,SC
-3301403136,3301403391,US
-3301403392,3301403903,SC
-3301403904,3301404159,US
-3301404160,3301405951,SC
-3301405952,3301406207,US
-3301406208,3301407231,SC
-3301407232,3301407487,US
-3301407488,3301407743,SC
-3301407744,3301407999,US
-3301408000,3301408511,SC
-3301408512,3301408767,US
-3301408768,3301410047,SC
-3301410048,3301410303,US
-3301410304,3301412351,SC
-3301412352,3301412607,US
-3301412608,3301414655,SC
-3301414656,3301414911,US
-3301414912,3301419519,SC
-3301419520,3301420031,US
-3301420032,3301423103,SC
-3301423104,3301423359,US
-3301423360,3301426943,SC
-3301426944,3301427199,US
-3301427200,3301427455,SC
-3301427456,3301427711,US
-3301427712,3301428223,SC
-3301428224,3301428479,US
-3301428480,3301431295,SC
-3301431296,3301431551,US
-3301431552,3301432063,SC
-3301432064,3301432319,US
-3301432320,3301433599,SC
-3301433600,3301434367,US
-3301434368,3301435647,SC
-3301435648,3301435903,US
-3301435904,3301437951,SC
-3301437952,3301438207,US
-3301438208,3301439999,SC
-3301440000,3301440255,US
-3301440256,3301440767,SC
-3301440768,3301441023,US
-3301441024,3301441535,SC
+3301371904,3301441535,SC
3301441536,3301445631,ZA
3301445632,3301453823,KE
3301453824,3301457919,ML
@@ -63005,7 +63294,7 @@
3301471488,3301474047,NG
3301474048,3301474303,GH
3301474304,3301490687,MA
-3301494784,3301498879,TZ
+3301494784,3301498879,ZM
3301507328,3301507583,ZW
3301507584,3301507839,GH
3301507840,3301508095,EG
@@ -63017,9 +63306,7 @@
3301515264,3301523455,GH
3301523456,3301531647,CI
3301539840,3301543935,A2
-3301543936,3301543967,KE
-3301543968,3301544191,UG
-3301544192,3301544959,KE
+3301543936,3301544959,KE
3301544960,3301545215,A2
3301545216,3301548031,KE
3301548032,3301556223,GH
@@ -63138,7 +63425,6 @@
3302956032,3302956287,CD
3302956544,3302957055,ZA
3302957056,3302957311,CG
-3302985728,3302987775,MU
3304062976,3304587263,SC
3304587264,3305111551,ZA
3305111552,3307208703,TN
@@ -63237,6 +63523,9 @@
3317301248,3317432319,TZ
3317432320,3317497855,NA
3317497856,3317530623,CD
+3317530624,3317547007,LS
+3317547008,3317563391,ZA
+3317563392,3317694463,GH
3317694464,3318218751,EG
3318218752,3318743039,DZ
3318743040,3318874111,SD
@@ -63298,8 +63587,7 @@
3320300544,3320301567,ZA
3320301568,3320302591,SO
3320302592,3320303615,GM
-3320303616,3320304127,SC
-3320304128,3320304639,GH
+3320303616,3320304639,SC
3320304640,3320305663,ZW
3320305664,3320306687,MZ
3320306688,3320307711,LR
@@ -63314,6 +63602,9 @@
3320315904,3320381439,KE
3320381440,3320446975,NA
3320446976,3320451071,SC
+3320451072,3320455167,ZA
+3320455168,3320463359,NG
+3320463360,3320479743,NA
3320479744,3320500223,ZA
3320500224,3320502271,BW
3320502272,3320504319,BJ
@@ -63337,9 +63628,7 @@
3320905728,3320938495,DJ
3320938496,3320971263,AO
3320971264,3320979455,GA
-3320979456,3320982783,ZA
-3320982784,3320983039,TZ
-3320983040,3320995839,ZA
+3320979456,3320995839,ZA
3320995840,3321004031,NG
3321004032,3321008127,GM
3321008128,3321012223,ZA
@@ -63370,13 +63659,7 @@
3321790464,3321806847,LS
3321806848,3321823231,SD
3321823232,3321839615,NG
-3321839616,3321843711,GH
-3321843712,3321846783,MU
-3321846784,3321848831,GH
-3321848832,3321849855,MU
-3321849856,3321850879,GH
-3321850880,3321854975,MU
-3321854976,3321855999,GH
+3321839616,3321855999,GH
3321856000,3321860095,CV
3321860096,3321864191,ZA
3321864192,3321868287,NG
@@ -63384,12 +63667,11 @@
3321872384,3321876479,GM
3321876480,3321880575,NG
3321880576,3321884671,KM
-3321884672,3321885439,ZA
-3321885440,3321885695,LS
+3321884672,3321885695,ZA
3321885696,3321886719,NG
3321886720,3321887743,GA
3321887744,3321888767,NG
-3321954304,3321968639,US
+3321888768,3321968639,US
3321968640,3321970687,CA
3321970688,3322003455,US
3322003456,3322019839,CA
@@ -63397,9 +63679,10 @@
3322023936,3322028031,CL
3322028032,3322036223,US
3322036224,3322052607,CA
-3322052608,3322167295,US
-3322167296,3322167807,GB
-3322167808,3322609663,US
+3322052608,3322353663,US
+3322353664,3322354175,VI
+3322354176,3322354431,JP
+3322354432,3322609663,US
3322609664,3322610687,SA
3322610688,3322683391,US
3322683392,3322691583,BR
@@ -63411,9 +63694,9 @@
3322945536,3322951679,CN
3322951680,3322970111,US
3322970112,3323002879,CA
+3323002880,3323003135,US
3323003136,3323003391,JP
-3323003392,3323003647,US
-3323003904,3323013887,US
+3323003392,3323013887,US
3323013888,3323014143,CA
3323014144,3323017727,US
3323017728,3323017983,CA
@@ -63449,22 +63732,25 @@
3323270400,3323270420,DE
3323270421,3323270421,CH
3323270422,3323270655,DE
-3323270656,3323330559,US
-3323330816,3323331071,US
+3323270656,3323331071,US
3323331072,3323331839,CA
-3323331840,3323342335,US
+3323331840,3323339263,US
+3323339776,3323340031,CA
+3323340288,3323342591,US
3323342592,3323342847,AU
3323343616,3323343871,DE
-3323343872,3323345919,US
+3323343872,3323346175,US
3323346176,3323346431,AU
3323346432,3323354111,US
3323354112,3323354367,GB
3323354368,3323355647,DE
-3323355904,3323356671,US
+3323355648,3323356671,US
3323356672,3323356927,CA
3323356928,3323378687,US
3323378688,3323378943,CA
-3323378944,3323391231,US
+3323378944,3323382783,US
+3323382784,3323383295,CA
+3323383296,3323391231,US
3323391232,3323391487,CA
3323391488,3323394559,US
3323394560,3323395071,CL
@@ -63472,10 +63758,13 @@
3323462656,3323463167,BR
3323463168,3323659263,US
3323659264,3323660543,NZ
+3323660544,3323661311,US
3323661312,3323662335,CA
3323662336,3323674623,US
-3323674624,3323681279,CA
-3323681280,3323741439,US
+3323674624,3323687073,CA
+3323687074,3323687074,US
+3323687075,3323691007,CA
+3323691008,3323741439,US
3323741440,3323741695,GB
3323741696,3323747327,US
3323747328,3323747583,GB
@@ -63512,14 +63801,16 @@
3324047616,3324048383,US
3324048384,3324051455,KN
3324051456,3324182527,CA
-3324182528,3324255231,US
+3324182528,3324193279,US
+3324193280,3324193791,CA
+3324193792,3324255231,US
3324255232,3324256255,VI
3324256256,3324260095,SA
3324260096,3324266495,US
3324266496,3324266751,AP
3324266752,3324270079,US
3324270080,3324270591,EU
-3324270592,3324277247,US
+3324270592,3324277759,US
3324277760,3324278783,CA
3324278784,3324354559,US
3324354560,3324362751,CA
@@ -63536,7 +63827,7 @@
3324655872,3324656127,CA
3324656128,3324732415,US
3324732416,3324732671,EU
-3324732672,3324772351,US
+3324732672,3324805119,US
3324837888,3324843775,US
3324843776,3324843799,SG
3324843800,3324843801,AP
@@ -63558,7 +63849,7 @@
3325132032,3325132799,US
3325132800,3325133823,BR
3325134336,3325134591,US
-3325134848,3325135359,US
+3325134848,3325135871,US
3325136128,3325136383,CA
3325136384,3325136639,US
3325136896,3325142015,US
@@ -63582,7 +63873,11 @@
3325218208,3325218239,US
3325218240,3325220863,CA
3325220864,3325220879,US
-3325220880,3325231103,CA
+3325220880,3325225671,CA
+3325225672,3325225675,US
+3325225676,3325229591,CA
+3325229592,3325229599,US
+3325229600,3325231103,CA
3325231104,3325232127,US
3325233152,3325234175,US
3325234176,3325234431,SA
@@ -63609,19 +63904,15 @@
3325284864,3325285119,AU
3325285376,3325304831,US
3325304832,3325313023,CA
-3325313024,3325329407,US
-3325329408,3325348415,CA
-3325348416,3325348671,US
-3325348672,3325427711,CA
+3325313024,3325362175,US
+3325362176,3325427711,CA
3325427712,3325450239,ZA
3325451008,3325451263,ZA
3325451264,3325452287,US
3325452800,3325453311,ZA
3325453312,3325454335,CA
3325454336,3325463551,US
-3325463808,3325464063,ZA
-3325464064,3325465087,NA
-3325465088,3325481983,ZA
+3325463552,3325481983,ZA
3325481984,3325483007,CA
3325483008,3325488127,ZA
3325488128,3325490175,US
@@ -63662,13 +63953,9 @@
3326191296,3326191359,US
3326191360,3326191551,US
3326191552,3326191583,US
-3326191584,3326349823,US
-3326349824,3326350335,EC
-3326350336,3326406655,US
+3326191584,3326406655,US
3326406656,3326408703,CO
-3326408704,3326413823,US
-3326413824,3326414335,YE
-3326414336,3326420991,US
+3326408704,3326420991,US
3326420992,3326423039,PR
3326423040,3326613503,US
3326613504,3326615551,CA
@@ -63692,9 +63979,7 @@
3326734336,3326737663,CA
3326737664,3326737919,US
3326737920,3326738175,CA
-3326738432,3326953983,US
-3326953984,3326954495,AS
-3326954496,3327144959,US
+3326738432,3327144959,US
3327144960,3327145983,CA
3327145984,3327172863,US
3327172864,3327173119,AP
@@ -63752,8 +64037,8 @@
3328433920,3328475135,US
3328475136,3328477183,CA
3328477184,3328479231,US
-3328479232,3328481279,CA
-3328481280,3328514559,US
+3328479232,3328483327,CA
+3328483328,3328514559,US
3328515072,3328516095,DM
3328516096,3328617983,US
3328617984,3328618239,CA
@@ -63814,21 +64099,19 @@
3330796544,3330796799,CA
3330796800,3330812927,US
3330812928,3330813951,CA
-3330813952,3330883583,US
+3330813952,3330866943,US
+3330866944,3330867199,CA
+3330867200,3330883583,US
3330883584,3330884351,NL
-3330884352,3330888191,US
-3330888192,3330888703,AU
-3330888704,3330889471,US
+3330884352,3330889471,US
3330889472,3330890239,JP
-3330890240,3330890751,BE
-3330890752,3330891263,GB
-3330891264,3330894079,US
-3330894080,3330894591,GB
-3330894592,3330898431,US
-3330898432,3330898943,FR
-3330898944,3331070463,US
+3330890240,3330904575,US
+3330904576,3330904831,CA
+3330904832,3331070463,US
3331070464,3331070975,UM
-3331070976,3331102463,US
+3331070976,3331098111,US
+3331098112,3331098367,CA
+3331098368,3331102463,US
3331102464,3331102719,CA
3331102720,3331194879,US
3331194880,3331260415,AU
@@ -63840,9 +64123,7 @@
3331352920,3331352920,US
3331352921,3331353087,US
3331353088,3331353599,US
-3331353600,3331356671,US
-3331356672,3331357183,BZ
-3331357184,3331362815,US
+3331353600,3331362815,US
3331362816,3331366911,CA
3331366912,3331527423,US
3331527424,3331527679,GB
@@ -63869,7 +64150,8 @@
3331936256,3331988479,US
3331988480,3331989503,CA
3331989504,3332001791,US
-3332001792,3332005887,CA
+3332001792,3332003839,CA
+3332003840,3332005887,A2
3332005888,3332028415,US
3332028416,3332030463,CA
3332030464,3332083967,US
@@ -63892,7 +64174,8 @@
3332491264,3332492031,US
3332492032,3332500735,CA
3332500736,3332500991,US
-3332500992,3332503039,CA
+3332500992,3332501247,CA
+3332501504,3332503039,CA
3332503040,3332503551,US
3332503552,3332505343,CA
3332505344,3332505855,US
@@ -64009,12 +64292,7 @@
3333675776,3333676031,CA
3333676032,3333705727,US
3333705728,3333709567,GB
-3333709568,3333710847,US
-3333710848,3333711359,GB
-3333711360,3333711871,DE
-3333711872,3333716223,US
-3333716224,3333716735,CA
-3333716736,3333721599,US
+3333709568,3333721599,US
3333721600,3333721855,JP
3333721856,3333781503,US
3333781504,3333783551,CA
@@ -64050,7 +64328,9 @@
3334934016,3334934527,CA
3334934528,3334995967,US
3334995968,3334998527,PH
-3334998528,3335011071,US
+3334998528,3335004655,US
+3335004656,3335004671,CN
+3335004672,3335011071,US
3335011072,3335011327,US
3335011328,3335012351,US
3335012352,3335028735,CA
@@ -64132,11 +64412,11 @@
3337900032,3337948671,US
3337948672,3337949183,CA
3337949184,3337957375,US
-3337957376,3337958399,CA
-3337958400,3337960447,US
-3337960448,3337963128,CA
+3337957376,3337963128,CA
3337963129,3337963129,US
-3337963130,3337965567,CA
+3337963130,3337964031,CA
+3337964032,3337964543,A2
+3337964544,3337965567,CA
3337965568,3337969663,US
3337969664,3337973759,PR
3337973760,3337977855,CA
@@ -64159,12 +64439,16 @@
3338354688,3338371071,US
3338371072,3338403839,CA
3338403840,3338424319,US
-3338424320,3338432511,CA
+3338424320,3338428415,CA
+3338428416,3338429439,US
+3338429440,3338429951,CA
+3338429952,3338430719,US
+3338430720,3338432511,CA
3338432512,3338455039,US
3338455040,3338455295,GB
3338455296,3338567679,US
3338567680,3338600447,CA
-3338665984,3338686463,US
+3338600448,3338686463,US
3338686464,3338688511,AW
3338688512,3338770431,US
3338770432,3338772479,PR
@@ -64179,8 +64463,7 @@
3339059886,3339075583,US
3339075584,3339076863,GB
3339076864,3339077631,JP
-3339077632,3339079167,US
-3339079168,3339079679,DE
+3339077632,3339079679,US
3339079680,3339080703,IT
3339080704,3339080959,US
3339080960,3339081727,HK
@@ -64188,9 +64471,7 @@
3339081984,3339082751,FR
3339082752,3339091967,US
3339091968,3339092991,NL
-3339092992,3339093503,US
-3339093504,3339094015,NL
-3339094016,3339142655,US
+3339092992,3339142655,US
3339142656,3339142911,NL
3339142912,3339146239,US
3339146496,3339147007,US
@@ -64297,11 +64578,7 @@
3341340160,3341340415,AP
3341340416,3341439200,US
3341439201,3341439201,CA
-3341439202,3341445119,US
-3341445120,3341445631,DE
-3341445632,3341479935,US
-3341479936,3341480447,DE
-3341480448,3341484287,US
+3341439202,3341484287,US
3341484288,3341485055,CA
3341485056,3341488639,US
3341488640,3341488895,JP
@@ -64344,7 +64621,9 @@
3341867008,3341869055,CA
3341869056,3341873151,US
3341873152,3341875199,US
-3341875200,3342139391,US
+3341875200,3341881087,US
+3341881088,3341881343,SG
+3341881344,3342139391,US
3342139392,3342204927,CH
3342204928,3342487551,US
3342487552,3342488575,CA
@@ -64377,9 +64656,9 @@
3342795008,3342795263,AP
3342795264,3342831103,US
3342831104,3342831359,IN
-3342831360,3342878971,US
-3342878972,3342878972,EU
-3342878973,3343013887,US
+3342831360,3342878967,US
+3342878968,3342878975,EU
+3342878976,3343013887,US
3343013888,3343015935,CA
3343015936,3343055871,US
3343055872,3343056895,CA
@@ -64408,8 +64687,8 @@
3343461376,3343465471,US
3343465472,3343466495,JM
3343466496,3343858687,US
-3343858688,3343859199,VG
-3343859200,3344116223,US
+3343858688,3343859711,VG
+3343859712,3344116223,US
3344116224,3344116735,CA
3344116736,3344126975,US
3344126976,3344127999,CA
@@ -64560,7 +64839,10 @@
3346196480,3346197503,CA
3346197504,3346201599,US
3346201600,3346202623,CA
-3346202624,3346219007,US
+3346202624,3346209279,US
+3346209792,3346210241,US
+3346210242,3346210242,CA
+3346210243,3346219007,US
3346219008,3346221055,CA
3346221056,3346225151,US
3346225152,3346227199,CA
@@ -64594,7 +64876,9 @@
3346793472,3346793983,US
3346794496,3346923519,US
3346923520,3346989055,CA
-3346989056,3347016703,US
+3346989056,3347015647,US
+3347015648,3347015663,AE
+3347015664,3347016703,US
3347016704,3347017727,CA
3347017728,3347021823,US
3347021824,3347022847,CA
@@ -64602,9 +64886,7 @@
3347033088,3347034111,CA
3347034112,3347039231,US
3347039232,3347040255,DM
-3347040256,3349268479,US
-3349268480,3349268991,CA
-3349268992,3349446911,US
+3347040256,3349446911,US
3349446912,3349447167,CA
3349447168,3349463039,US
3349463040,3349463295,CA
@@ -64619,8 +64901,8 @@
3349545984,3349551103,CA
3349551104,3349553663,US
3349553664,3349608447,CA
-3349608448,3349609215,US
-3349609216,3349610239,CA
+3349608448,3349609471,US
+3349609472,3349610239,CA
3349610240,3349614591,US
3349614592,3349617663,CA
3349617664,3349637119,US
@@ -64752,9 +65034,7 @@
3351336960,3351339007,CA
3351339008,3351357439,US
3351357440,3351359487,CA
-3351359488,3351364607,US
-3351364608,3351365119,AU
-3351365120,3351372799,US
+3351359488,3351372799,US
3351372800,3351373823,BM
3351373824,3351483391,US
3351483392,3351484415,CA
@@ -64825,9 +65105,7 @@
3353729024,3353729279,HK
3353729280,3353730047,US
3353730048,3353731071,CA
-3353731072,3353731487,US
-3353731488,3353731503,AU
-3353731504,3353736447,US
+3353731072,3353736447,US
3353736448,3353736703,PR
3353736704,3353780223,US
3353780224,3353780479,GB
@@ -64903,11 +65181,10 @@
3355384832,3355385855,CA
3355385856,3355407359,US
3355407360,3355408383,PR
-3355408384,3355412479,US
-3355412480,3355412991,BE
-3355412992,3355430911,US
+3355408384,3355430911,US
3355430912,3355432959,US
-3355432960,3355443199,US
+3355432960,3355435007,CA
+3355435008,3355443199,US
3355443200,3355445247,CO
3355445248,3355447295,BR
3355447296,3355447551,CU
@@ -65289,11 +65566,9 @@
3356284928,3356286975,AR
3356286976,3356288511,US
3356288512,3356288767,SV
-3356288768,3356289023,US
-3356289024,3356289535,SV
-3356289536,3356290303,US
+3356288768,3356290303,US
3356290304,3356290559,SV
-3356290560,3356291071,CR
+3356290560,3356291071,US
3356291072,3356293119,TT
3356293120,3356295167,AW
3356295168,3356297215,CL
@@ -65395,17 +65670,11 @@
3357407232,3357409279,AR
3357409280,3357411327,BR
3357411328,3357412351,VE
-3357412352,3357412863,PE
-3357412864,3357414399,US
+3357412352,3357414399,US
3357414400,3357415423,PR
-3357415424,3357415935,US
-3357415936,3357416447,MX
-3357416448,3357416959,VE
-3357416960,3357417471,US
+3357415424,3357417471,US
3357417472,3357418495,CL
-3357418496,3357419007,US
-3357419008,3357419519,GT
-3357419520,3357420031,SZ
+3357418496,3357420031,US
3357420032,3357421055,CO
3357421056,3357421567,US
3357421568,3357422847,NI
@@ -65538,7 +65807,9 @@
3357757488,3357757495,BO
3357757496,3357773823,VE
3357773824,3357775871,PA
-3357775872,3357776895,UY
+3357775872,3357776127,US
+3357776128,3357776383,UY
+3357776384,3357776895,US
3357777920,3357786111,GT
3357786112,3357802495,VE
3357802496,3357868031,MX
@@ -65716,8 +65987,8 @@
3358720000,3358728191,PR
3358728192,3358736383,CL
3358736384,3358738175,BB
-3358738176,3358738431,GD
-3358738432,3358744575,BB
+3358738176,3358738687,GD
+3358738688,3358744575,BB
3358744576,3358752767,CL
3358752768,3358756863,BB
3358756864,3358760959,CL
@@ -65766,14 +66037,10 @@
3359506432,3359508479,US
3359508480,3359510527,VE
3359510528,3359511807,US
-3359511808,3359513087,VE
-3359513088,3359513599,US
-3359513600,3359514111,VE
-3359514112,3359514623,US
+3359511808,3359512575,VE
+3359512576,3359514623,US
3359514624,3359514879,CL
-3359514880,3359520255,US
-3359520256,3359520767,AR
-3359520768,3359522815,US
+3359514880,3359522815,US
3359522816,3359539199,NI
3359539200,3359571967,PE
3359571968,3359582207,AR
@@ -65810,7 +66077,6 @@
3360276480,3360278527,VE
3360278528,3360280575,EC
3360280576,3360282623,CL
-3360282624,3360284671,CO
3360284672,3360325631,CL
3360325632,3360333823,CO
3360333824,3360342015,CL
@@ -65955,7 +66221,7 @@
3362476032,3362476287,HN
3362476288,3362476543,AR
3362476544,3362477055,CR
-3362477056,3362478079,CW
+3362477056,3362478079,BQ
3362478080,3362480127,AR
3362486272,3362488319,HN
3362488320,3362504703,PE
@@ -66374,7 +66640,6 @@
3389306624,3389306879,AU
3389306880,3389307135,SG
3389307136,3389307647,ID
-3389307648,3389307903,JP
3389307904,3389308159,AU
3389308160,3389308415,KH
3389308416,3389308671,AU
@@ -66763,9 +67028,7 @@
3390769664,3390770175,TH
3390770176,3390771199,AU
3390771200,3390775295,SG
-3390775296,3390790399,NZ
-3390790400,3390790655,AU
-3390790656,3390801919,NZ
+3390775296,3390801919,NZ
3390801920,3390802431,CN
3390802432,3390832639,NZ
3390832640,3390963711,TH
@@ -67380,8 +67643,7 @@
3393741568,3393741823,MG
3393741824,3393742847,US
3393742848,3393743871,TL
-3393743872,3393744639,US
-3393744640,3393744895,KH
+3393743872,3393744895,US
3393744896,3393748991,PH
3393748992,3393765375,AU
3393765376,3393773567,ID
@@ -67435,9 +67697,7 @@
3393867776,3393871871,CN
3393871872,3393874943,HK
3393874944,3393875967,AU
-3393875968,3393878015,HK
-3393878016,3393878271,IN
-3393878272,3393880063,HK
+3393875968,3393880063,HK
3393880064,3393896447,AU
3393896448,3393906687,NZ
3393908736,3393910783,BD
@@ -67860,7 +68120,7 @@
3397216256,3397216767,AU
3397216768,3397217023,IN
3397217024,3397217279,SG
-3397217280,3397217791,AU
+3397217280,3397217535,AU
3397217792,3397218047,NZ
3397218048,3397218303,AU
3397218304,3397222399,CN
@@ -68244,8 +68504,7 @@
3399557120,3399565311,SG
3399565312,3399581695,AU
3399581696,3399581951,HK
-3399581952,3399589631,US
-3399589632,3399589887,NP
+3399581952,3399589887,US
3399589888,3399593983,HK
3399593984,3399598079,BD
3399598080,3399614463,JP
@@ -68438,9 +68697,7 @@
3400435712,3400436223,BD
3400436224,3400438201,HK
3400438202,3400438202,US
-3400438203,3400438527,HK
-3400438528,3400438783,AF
-3400438784,3400441599,HK
+3400438203,3400441599,HK
3400441600,3400441855,AU
3400441856,3400446975,NZ
3400446976,3400447231,AU
@@ -69351,8 +69608,8 @@
3407334400,3407335423,CN
3407335424,3407339519,AU
3407339520,3407339775,CN
-3407339776,3407340543,AU
-3407340544,3407341567,CN
+3407339776,3407340031,AU
+3407340032,3407341567,CN
3407341568,3407345919,AU
3407345920,3407346175,CN
3407346176,3407346431,AU
@@ -69505,9 +69762,7 @@
3407523072,3407523327,CN
3407523328,3407523839,AU
3407523840,3407524095,CN
-3407524096,3407524607,AU
-3407524608,3407524863,NZ
-3407524864,3407526143,AU
+3407524096,3407526143,AU
3407526144,3407526399,CN
3407526400,3407530495,AU
3407530496,3407531007,CN
@@ -69688,7 +69943,7 @@
3407748608,3407750655,AU
3407750656,3407751167,SG
3407751168,3407753215,AU
-3407753216,3407753727,HK
+3407753216,3407753727,SG
3407753728,3407757823,AU
3407757824,3407758079,CN
3407758080,3407761663,AU
@@ -70207,9 +70462,7 @@
3411058688,3411062783,AU
3411062784,3411064831,HK
3411064832,3411065087,BD
-3411065088,3411066111,HK
-3411066112,3411066367,A2
-3411066368,3411083263,HK
+3411065088,3411083263,HK
3411083264,3411085311,CN
3411085312,3411086335,KR
3411086336,3411087359,JP
@@ -70261,7 +70514,8 @@
3411270656,3411271679,SG
3411271680,3411275775,CN
3411275776,3411277823,JP
-3411277824,3411278335,IN
+3411277824,3411278079,IN
+3411278080,3411278335,HK
3411278336,3411278591,SG
3411278592,3411278847,FJ
3411278848,3411296255,HK
@@ -70297,9 +70551,7 @@
3411550208,3411558399,CN
3411558400,3411559935,HK
3411559936,3411560191,US
-3411560192,3411561727,HK
-3411561728,3411561983,AU
-3411561984,3411565257,HK
+3411560192,3411565257,HK
3411565258,3411565258,US
3411565259,3411566591,HK
3411566592,3411570687,BD
@@ -70346,9 +70598,7 @@
3411763200,3411767295,CN
3411767296,3411769343,MN
3411769344,3411771391,CN
-3411771392,3411773951,HK
-3411773952,3411774207,BD
-3411774208,3411775811,HK
+3411771392,3411775811,HK
3411775812,3411775813,US
3411775814,3411777023,HK
3411777024,3411777279,ID
@@ -70369,9 +70619,7 @@
3411836928,3411845119,MY
3411845120,3411853311,CN
3411853312,3411857407,IN
-3411857408,3411858687,JP
-3411858688,3411858943,NZ
-3411858944,3411859249,JP
+3411857408,3411859249,JP
3411859250,3411859251,AU
3411859252,3411859711,JP
3411859712,3411860223,AP
@@ -70676,8 +70924,8 @@
3414670848,3414671359,MY
3414671360,3415080959,JP
3415080960,3415083007,SG
-3415083008,3415083519,AU
-3415083520,3415084031,SG
+3415083008,3415083023,AU
+3415083024,3415084031,SG
3415084032,3415084159,CN
3415084160,3415089151,SG
3415089152,3415097343,MY
@@ -70735,9 +70983,7 @@
3415568384,3415572479,KR
3415572480,3415605247,SG
3415605248,3415736319,TH
-3415736320,3415740927,SG
-3415740928,3415741183,TH
-3415741184,3415752703,SG
+3415736320,3415752703,SG
3415752704,3415760895,CN
3415760896,3415769087,NZ
3415769088,3415777279,CN
@@ -70821,8 +71067,8 @@
3416391680,3416457215,VN
3416457216,3416475391,JP
3416475392,3416475647,NZ
-3416475648,3416489471,JP
-3416489472,3416489983,AU
+3416475648,3416489727,JP
+3416489728,3416489983,AU
3416489984,3416506367,VN
3416506368,3416514559,TW
3416514560,3416522751,IN
@@ -70975,7 +71221,9 @@
3417866240,3417915391,HK
3417915392,3417939967,TH
3417939968,3417946111,PF
-3417946112,3417947135,AU
+3417946112,3417946137,AU
+3417946138,3417946138,HK
+3417946139,3417947135,AU
3417947136,3417947391,IN
3417947648,3417947903,AU
3417947904,3417948159,IN
@@ -71066,7 +71314,7 @@
3418301440,3418302463,AU
3418302464,3418304511,ID
3418304512,3418306559,VN
-3418306560,3418308607,MN
+3418306560,3418307583,MN
3418308608,3418324991,CN
3418324992,3418326015,VU
3418326016,3418326271,AU
@@ -71092,9 +71340,7 @@
3418406912,3418423295,IN
3418423296,3418444091,HK
3418444092,3418444095,CN
-3418444096,3418448639,HK
-3418448640,3418448895,SG
-3418448896,3418452479,HK
+3418444096,3418452479,HK
3418452480,3418452735,SG
3418452736,3418456063,HK
3418456064,3418472447,IN
@@ -71124,15 +71370,7 @@
3418644480,3418644735,JP
3418644736,3418644991,AU
3418644992,3418645247,TW
-3418645248,3418645503,SG
-3418645504,3418645759,JP
-3418645760,3418646271,NZ
-3418646272,3418646527,HK
-3418646528,3418646783,JP
-3418646784,3418647039,TW
-3418647040,3418648063,JP
-3418648064,3418648575,SG
-3418648576,3418649343,JP
+3418645248,3418649343,JP
3418649344,3418649599,AP
3418649600,3418652671,JP
3418652672,3418750975,IN
@@ -71224,7 +71462,6 @@
3419668480,3419672575,CN
3419672576,3419674623,AU
3419674624,3419675647,IN
-3419675648,3419676671,MN
3419676672,3419684863,JP
3419684864,3419688959,IN
3419688960,3419693055,CN
@@ -71295,7 +71532,9 @@
3420367360,3420367615,AP
3420367616,3420369007,AU
3420369008,3420369023,HK
-3420369024,3420372991,AU
+3420369024,3420370559,AU
+3420370560,3420370575,JP
+3420370576,3420372991,AU
3420372992,3420374527,CN
3420374528,3420374783,ID
3420374784,3420375551,CN
@@ -71375,8 +71614,7 @@
3423377408,3423378431,CA
3423378432,3423378943,US
3423378944,3423379455,CA
-3423379456,3423379967,US
-3423379968,3423416319,US
+3423379456,3423416319,US
3423416320,3423417343,CA
3423417344,3423430655,US
3423430656,3423431167,TC
@@ -71422,9 +71660,7 @@
3423705856,3423797503,US
3423797504,3423801087,CA
3423801088,3423801343,US
-3423801344,3423823359,CA
-3423823360,3423823871,US
-3423823872,3423827711,CA
+3423801344,3423827711,CA
3423827712,3423827967,US
3423827968,3423830271,CA
3423830272,3423830527,US
@@ -71492,9 +71728,11 @@
3426729472,3426729983,CA
3426729984,3426744319,US
3426744320,3426746367,CA
-3426746368,3427038719,US
-3427038720,3427038975,US
-3427038976,3427112447,US
+3426746368,3427035135,US
+3427035136,3427036159,US
+3427036160,3427038719,US
+3427038720,3427039231,US
+3427039232,3427112447,US
3427112448,3427112703,CN
3427112704,3427117055,US
3427117056,3427117311,CA
@@ -71502,7 +71740,9 @@
3427127296,3427127551,CA
3427127552,3427132927,US
3427132928,3427133183,EU
-3427133184,3427426303,US
+3427133184,3427408393,US
+3427408394,3427408394,EU
+3427408395,3427426303,US
3427426304,3427426559,HK
3427426560,3427428863,US
3427428864,3427429119,GB
@@ -71518,20 +71758,13 @@
3427732736,3427735039,IE
3427735040,3427735295,US
3427735296,3427736063,HK
-3427736064,3427742719,US
-3427742720,3427743231,CH
-3427743232,3427744255,US
-3427744256,3427745279,DE
-3427745280,3427745791,TW
-3427745792,3427748863,US
+3427736064,3427748863,US
3427748864,3427749631,DE
3427749632,3427749887,US
3427749888,3427750655,DE
3427750656,3427752447,US
3427752448,3427752703,EU
-3427752704,3427759359,US
-3427759360,3427759871,GB
-3427759872,3427760127,US
+3427752704,3427760127,US
3427760128,3427760895,CA
3427760896,3427762175,US
3427762176,3427762431,DE
@@ -71606,16 +71839,14 @@
3427791872,3427792383,CA
3427792384,3427792639,NL
3427792640,3427793407,SG
-3427793408,3427793919,HK
+3427793408,3427793919,NL
3427793920,3427794175,US
3427794176,3427794943,NL
3427794944,3427796991,CA
3427796992,3427831551,US
3427831552,3427831807,MX
3427831808,3427860479,US
-3427860480,3428025343,CA
-3428025344,3428025855,US
-3428025856,3428057087,CA
+3427860480,3428057087,CA
3428057088,3428286719,US
3428286720,3428286975,CA
3428286976,3428296959,US
@@ -71634,28 +71865,22 @@
3428434944,3428435199,CA
3428435200,3428437503,US
3428437504,3428437759,MX
-3428437760,3428496639,US
-3428496640,3428497151,NL
-3428497152,3428592639,US
+3428437760,3428592639,US
3428592640,3428593919,CA
3428593920,3428598015,US
3428598016,3428598271,CA
-3428598272,3428600831,US
-3428600832,3428601343,CA
-3428601344,3428606463,US
+3428598272,3428606463,US
3428606464,3428606591,CA
3428606592,3428606655,US
3428606656,3428606719,CA
-3428606720,3428630015,US
-3428630016,3428634623,CA
+3428606720,3428607999,US
+3428608000,3428609023,CA
+3428609024,3428630527,US
+3428630528,3428634623,CA
3428634624,3428635903,US
3428635904,3428636671,CA
-3428636672,3428641279,US
-3428641280,3428641791,CA
-3428641792,3428642303,US
-3428642304,3428642815,CA
-3428642816,3428660991,US
-3428660992,3428661247,CA
+3428636672,3428660735,US
+3428660736,3428661247,CA
3428661248,3428662271,US
3428662272,3428662527,US
3428662528,3428689646,US
@@ -71667,7 +71892,9 @@
3428753408,3428958207,US
3428958208,3428962303,CO
3428962304,3429171199,US
-3429171200,3429236735,CA
+3429171200,3429189631,CA
+3429189632,3429189887,A2
+3429189888,3429236735,CA
3429236736,3429381887,US
3429381888,3429382143,EU
3429382144,3429382399,DE
@@ -71745,9 +71972,7 @@
3431642624,3431657471,CA
3431657472,3431658495,US
3431658496,3431661311,CA
-3431661312,3431748607,US
-3431748608,3431749119,FR
-3431749120,3431751423,US
+3431661312,3431751423,US
3431751424,3431752703,IT
3431752704,3431753727,US
3431753728,3431755007,CA
@@ -71842,7 +72067,11 @@
3436290048,3436314367,CA
3436314368,3436476415,US
3436476416,3436478463,AW
-3436478464,3437297919,US
+3436478464,3436507391,US
+3436507392,3436507647,BB
+3436507648,3436507903,US
+3436507904,3436509183,BB
+3436509184,3437297919,US
3437297920,3437301759,CA
3437301760,3437305855,US
3437305856,3437307391,CA
@@ -71863,28 +72092,25 @@
3437341696,3437341951,US
3437341952,3437343231,CA
3437343232,3437343487,US
-3437343488,3437350911,CA
+3437343488,3437345791,CA
+3437345792,3437346047,A2
+3437346048,3437350911,CA
3437350912,3437351423,US
-3437351424,3437358847,CA
+3437351424,3437353983,CA
+3437353984,3437354239,A2
+3437354240,3437358847,CA
3437358848,3437359103,US
3437359104,3437428735,CA
3437428736,3437691391,US
3437691392,3437691647,HK
-3437691648,3437691903,US
-3437691904,3437692415,FR
-3437692416,3437692671,US
+3437691648,3437692671,US
3437692672,3437693439,CA
3437693440,3437694207,US
3437694208,3437695231,AT
3437695232,3437695999,HK
-3437696000,3437696511,NL
-3437696512,3437702911,US
+3437696000,3437702911,US
3437702912,3437703167,HK
-3437703168,3437704191,US
-3437704192,3437704703,CH
-3437704704,3437708287,US
-3437708288,3437708799,FI
-3437708800,3437712639,US
+3437703168,3437712639,US
3437712640,3437713663,GB
3437713664,3437715967,US
3437715968,3437716991,DE
@@ -71892,14 +72118,7 @@
3437717248,3437718527,BE
3437718528,3437720063,US
3437720064,3437723135,SG
-3437723136,3437725183,US
-3437725184,3437725695,MN
-3437725696,3437726207,DE
-3437726208,3437726463,US
-3437726464,3437726975,GB
-3437726976,3437736447,US
-3437736448,3437737471,CL
-3437737472,3437748223,US
+3437723136,3437748223,US
3437748224,3437748479,GB
3437748480,3437748991,NL
3437748992,3437749247,US
@@ -71955,24 +72174,19 @@
3438614616,3438813183,US
3438813184,3438814207,GH
3438814208,3438895103,US
-3438895104,3438896895,HN
-3438896896,3448263423,US
-3448263424,3448263935,AG
-3448263936,3448303103,US
+3438895104,3438896127,HN
+3438896128,3438896639,US
+3438896640,3438896895,HN
+3438896896,3448303103,US
3448303104,3448303615,KY
-3448303616,3448338943,US
-3448338944,3448339455,GB
-3448339456,3448380839,US
-3448380840,3448380847,SG
-3448380848,3448398335,US
-3448398336,3448398847,CA
-3448398848,3448399359,US
-3448399360,3448399871,CA
-3448399872,3448717311,US
+3448303616,3448717311,US
3448717312,3448717567,AU
3448717568,3448838143,US
3448838144,3448838399,CA
-3448838400,3449161983,US
+3448838400,3448989695,US
+3448989696,3448990719,HK
+3448990720,3448991743,IN
+3448991744,3449161983,US
3449161984,3449162239,CA
3449162240,3449174527,US
3449174528,3449174783,CA
@@ -71980,8 +72194,8 @@
3449176064,3449176319,CA
3449176320,3449176831,US
3449176832,3449177087,CA
-3449177088,3449177599,US
-3449177600,3449178111,CA
+3449177088,3449177855,US
+3449177856,3449178111,CA
3449178112,3449182719,US
3449182720,3449182975,CA
3449182976,3449183231,US
@@ -71994,18 +72208,12 @@
3449198688,3449198719,CA
3449198720,3449204735,US
3449204736,3449205759,CA
-3449205760,3449222911,US
-3449222912,3449223423,CA
-3449223424,3449223679,US
-3449223680,3449224191,CA
-3449224192,3449225471,US
+3449205760,3449225471,US
3449225472,3449254143,CA
3449254144,3449254911,US
3449254912,3449273599,CA
3449273600,3449273855,US
-3449273856,3449278975,CA
-3449278976,3449279487,US
-3449279488,3449290495,CA
+3449273856,3449290495,CA
3449290496,3449582848,US
3449582849,3449582849,EU
3449582850,3449593855,US
@@ -72018,9 +72226,7 @@
3449823232,3449824255,CO
3449824256,3449835519,US
3449835520,3449836543,ES
-3449836544,3449843199,US
-3449843200,3449843711,YE
-3449843712,3449974783,US
+3449836544,3449974783,US
3449974784,3449976831,CA
3449976832,3450078463,US
3450078464,3450079487,US
@@ -72075,9 +72281,7 @@
3450976768,3450982399,US
3450982400,3450984447,TW
3450984448,3450986495,PH
-3450986496,3451507199,US
-3451507200,3451507711,BR
-3451507712,3451715839,US
+3450986496,3451715839,US
3451715840,3451724543,CA
3451724544,3451724799,US
3451725312,3451725567,US
@@ -72096,9 +72300,7 @@
3451767296,3451767551,CA
3451767552,3451767807,US
3451767808,3451780863,CA
-3451780864,3451879423,US
-3451879424,3451879935,DE
-3451879936,3451884287,US
+3451780864,3451884287,US
3451884288,3451884543,DE
3451884544,3451890431,US
3451890432,3451890687,AU
@@ -72128,7 +72330,9 @@
3452931328,3452931583,US
3452931584,3452934911,CA
3452934912,3452936191,US
-3452936192,3452942847,CA
+3452936192,3452938751,CA
+3452938752,3452939263,US
+3452939264,3452942847,CA
3452942848,3452943103,US
3452943104,3452953087,CA
3452953088,3452953343,US
@@ -72167,21 +72371,17 @@
3453180928,3453195263,CA
3453195264,3453195519,US
3453195520,3453206527,CA
-3453206528,3453207551,HN
-3453207552,3453207807,US
+3453206528,3453206783,US
+3453206784,3453207039,HN
+3453207040,3453207807,US
3453207808,3453208575,HN
-3453208576,3453209087,US
-3453209088,3453209599,HN
-3453209600,3453209855,US
-3453209856,3453210367,HN
-3453210368,3453210623,US
+3453208576,3453210623,US
3453210624,3453213183,CR
-3453213184,3453214719,HN
-3453214720,3453215231,GT
+3453213184,3453214207,HN
+3453214208,3453215231,US
3453215232,3453215999,SV
3453216000,3453217023,CR
-3453217024,3453217535,SV
-3453217536,3453217791,US
+3453217024,3453217791,US
3453217792,3453219327,CR
3453219328,3453219583,US
3453219584,3453219839,SV
@@ -72190,7 +72390,9 @@
3453222912,3453241343,US
3453241344,3453243391,US
3453243392,3453403135,US
-3453403136,3453407743,BB
+3453403136,3453406975,BB
+3453406976,3453407231,GD
+3453407232,3453407743,BB
3453407744,3453408255,GD
3453408256,3453409023,BB
3453409024,3453409535,KN
@@ -72203,10 +72405,7 @@
3453610752,3453611007,AG
3453611008,3453611263,MS
3453611264,3453612543,DM
-3453612544,3453613055,KN
-3453613056,3453614591,AG
-3453614592,3453615103,DM
-3453615104,3453615359,AG
+3453612544,3453615359,AG
3453615360,3453615615,KN
3453615616,3453616127,AG
3453616128,3454003013,US
@@ -72284,57 +72483,29 @@
3455097856,3455109119,US
3455109120,3455111167,HN
3455111168,3455115263,SR
-3455115264,3455132159,US
-3455132160,3455133695,BO
+3455115264,3455132415,US
+3455132416,3455133695,BO
3455133696,3455320063,US
3455320064,3455322111,FR
3455322112,3455328255,US
3455328256,3455329279,DO
-3455329280,3455333887,US
-3455333888,3455334399,NL
-3455334400,3455357951,US
+3455329280,3455357951,US
3455357952,3455358975,BB
-3455358976,3455418367,US
-3455418368,3455418879,KY
-3455418880,3455421439,US
-3455421440,3455421951,BE
-3455421952,3455453439,US
+3455358976,3455453439,US
3455453440,3455453695,HT
3455453696,3455582207,US
3455582208,3455583743,SG
-3455583744,3455584255,NL
-3455584256,3455588351,US
-3455588352,3455588863,BE
-3455588864,3455596031,US
-3455596032,3455596543,CH
-3455596544,3455599615,US
-3455599616,3455600127,TW
-3455600128,3455600639,GB
-3455600640,3455601407,US
-3455601408,3455601919,GB
-3455601920,3455602175,US
-3455602176,3455602687,GB
-3455602688,3455617279,US
+3455583744,3455617279,US
3455617280,3455619071,GB
-3455619072,3455621631,US
-3455621632,3455622143,GB
-3455622144,3455627519,US
+3455619072,3455627519,US
3455627520,3455628287,DK
3455628288,3455628799,US
3455628800,3455630847,GB
3455630848,3455631359,US
3455631360,3455632639,ES
-3455632640,3455632895,US
-3455632896,3455633407,GB
-3455633408,3455634431,US
+3455632640,3455634431,US
3455634432,3455635455,DE
-3455635456,3455637759,US
-3455637760,3455638271,GB
-3455638272,3455644927,US
-3455644928,3455645439,GB
-3455645440,3455646207,US
-3455646208,3455646719,FR
-3455646720,3455713279,US
+3455635456,3455713279,US
3455713280,3455778815,CA
3455778816,3455864831,US
3455864832,3455866879,TW
@@ -72380,23 +72551,16 @@
3459327488,3459327999,CO
3459328000,3459329023,CL
3459329024,3459330047,VE
-3459330048,3459331071,US
-3459331072,3459331583,MX
+3459330048,3459331583,US
3459331584,3459332607,PA
-3459332608,3459333119,US
-3459333120,3459333631,PW
-3459333632,3459341055,US
+3459332608,3459341055,US
3459341056,3459341311,MX
-3459341312,3459348991,US
-3459348992,3459349503,IT
-3459349504,3459350527,US
+3459341312,3459350527,US
3459350528,3459352575,VE
3459352576,3459353599,US
3459353600,3459354623,CO
3459354624,3459357183,NI
-3459357184,3459359999,US
-3459360000,3459360511,VE
-3459360512,3459362815,US
+3459357184,3459362815,US
3459362816,3459364863,CO
3459364864,3459366911,AR
3459366912,3459368959,VE
@@ -72421,7 +72585,9 @@
3459513856,3459592191,US
3459592192,3459596287,CA
3459596288,3459614719,US
-3459616768,3459617023,US
+3459616768,3459616895,US
+3459616896,3459616959,CA
+3459616960,3459617023,US
3459617024,3459617791,CA
3459617792,3459617999,AP
3459618000,3459618000,ID
@@ -72442,9 +72608,7 @@
3460061688,3460061691,HK
3460061692,3460063175,US
3460063176,3460063179,HK
-3460063180,3460104703,US
-3460104704,3460105215,MX
-3460105216,3460114431,US
+3460063180,3460114431,US
3460114432,3460116479,SR
3460116480,3460161535,US
3460161536,3460165631,PR
@@ -72454,9 +72618,17 @@
3460411150,3460411150,EU
3460411151,3460507647,US
3460507648,3460507903,MX
-3460507904,3460878335,US
+3460507904,3460801023,US
+3460801024,3460801279,US
+3460801280,3460803583,US
+3460803584,3460803839,US
+3460803840,3460806399,US
+3460806400,3460806655,US
+3460806656,3460808447,US
+3460808448,3460808703,US
+3460808704,3460878335,US
3460878336,3460878591,CA
-3460878592,3460878847,US
+3460878592,3460879359,US
3460882432,3460905295,US
3460905296,3460905311,BR
3460905312,3460944127,US
@@ -72483,9 +72655,7 @@
3461808128,3461873663,CA
3461873664,3462593791,US
3462593792,3462594559,GN
-3462594560,3462633823,US
-3462633824,3462633855,SG
-3462633856,3463004159,US
+3462594560,3463004159,US
3463004160,3463006207,CO
3463006208,3463032319,US
3463032320,3463032831,PR
@@ -72497,8 +72667,8 @@
3463116800,3463118847,CO
3463118848,3463156735,US
3463156736,3463157759,BO
-3463157760,3463176191,US
-3463176192,3463176703,CW
+3463157760,3463176447,US
+3463176448,3463176703,CW
3463176704,3463184383,US
3463184384,3463192575,CA
3463192576,3463192831,US
@@ -72518,9 +72688,7 @@
3463708672,3463774207,CA
3463774208,3464127999,US
3464128000,3464128255,DE
-3464128256,3464129535,US
-3464129536,3464130047,DE
-3464130048,3464142335,US
+3464128256,3464142335,US
3464142336,3464142591,FR
3464142592,3464167679,US
3464167680,3464169215,CA
@@ -72548,7 +72716,9 @@
3464392704,3464392959,CA
3464392960,3464394751,US
3464394752,3464396799,LC
-3464396800,3464626175,US
+3464396800,3464421631,US
+3464421632,3464421887,CA
+3464422400,3464626175,US
3464626176,3464626687,CA
3464626688,3464627199,US
3464627968,3464630271,CA
@@ -72623,7 +72793,9 @@
3468361728,3468443647,US
3468443648,3468460031,CA
3468460032,3468468223,BM
-3468468224,3468623871,US
+3468468224,3468598591,US
+3468598592,3468598623,SG
+3468598624,3468623871,US
3468623872,3468656639,CA
3468656640,3468799999,US
3468800000,3468800255,GB
@@ -72683,9 +72855,7 @@
3470884864,3470885887,HK
3470885888,3471057919,US
3471057920,3471058943,VE
-3471058944,3471059455,US
-3471059456,3471059967,ES
-3471059968,3471262719,US
+3471058944,3471262719,US
3471262720,3471263743,EC
3471263744,3471265791,CO
3471265792,3471276031,US
@@ -72703,13 +72873,19 @@
3472392192,3472408575,CA
3472408576,3472571647,US
3472571648,3472571903,GH
-3472571904,3473039359,US
+3472571904,3472614911,US
+3472614912,3472615167,US
+3472615168,3472616959,US
+3472616960,3472617215,US
+3472617216,3472618751,US
+3472618752,3472619007,US
+3472619008,3472621055,US
+3472621056,3472621311,US
+3472621312,3473039359,US
3473039360,3473041407,BM
3473041408,3473276927,US
3473276928,3473342463,CA
-3473342464,3473765887,US
-3473765888,3473766399,EC
-3473766400,3474053119,US
+3473342464,3474053119,US
3474053120,3474055167,PE
3474055168,3474391039,US
3474391040,3474456575,CA
@@ -72753,9 +72929,9 @@
3475921152,3475921407,JP
3475921408,3475996671,US
3475996672,3476029439,CA
-3476029440,3476422143,US
-3476422144,3476422655,AZ
-3476422656,3476447231,US
+3476029440,3476418559,US
+3476418560,3476421631,CA
+3476421632,3476447231,US
3476447232,3476455423,CA
3476455424,3476881407,US
3476881408,3476946943,CA
@@ -72781,39 +72957,29 @@
3479568384,3479633919,CA
3479633920,3479896063,US
3479896064,3479961599,CA
-3479961600,3480223743,US
+3479961600,3480101375,US
+3480101376,3480101887,US
+3480101888,3480104447,US
+3480104448,3480104959,US
+3480104960,3480223743,US
3480223744,3480256511,CA
-3480256512,3480284159,US
-3480284160,3480284671,CA
-3480284672,3480444927,US
+3480256512,3480444927,US
3480444928,3480449023,CA
3480453120,3480556287,US
3480556288,3480556543,HK
-3480556544,3480567039,US
-3480567040,3480567551,GB
-3480567552,3480570879,US
-3480570880,3480571391,CH
-3480571392,3480575743,US
+3480556544,3480575743,US
3480575744,3480577023,IT
3480577024,3480582655,US
3480582656,3480583423,MX
-3480583424,3480591615,US
-3480591616,3480592127,ID
-3480592128,3480595967,US
+3480583424,3480595967,US
3480595968,3480596991,SG
3480596992,3480597247,US
3480597248,3480598271,AU
-3480598272,3480598527,US
-3480598528,3480599039,AU
-3480599040,3480602879,US
+3480598272,3480602879,US
3480602880,3480603647,IT
-3480603648,3480604159,US
-3480604160,3480604671,ES
-3480604672,3480612351,US
+3480603648,3480612351,US
3480612352,3480613631,DE
-3480613632,3480907263,US
-3480907264,3480907775,FR
-3480907776,3481164801,US
+3480613632,3481164801,US
3481164802,3481164802,US
3481164803,3481165057,US
3481165058,3481165058,US
@@ -72849,11 +73015,21 @@
3483239424,3483239679,US
3483239680,3483240703,US
3483240704,3483240959,US
-3483240960,3483247359,US
+3483240960,3483242495,US
+3483242496,3483242751,US
+3483242752,3483244543,US
+3483244544,3483244799,US
+3483244800,3483247359,US
3483247360,3483247871,US
3483247872,3483248639,US
3483248640,3483249151,US
-3483249152,3483435007,US
+3483249152,3483249919,US
+3483249920,3483250175,US
+3483250176,3483251455,US
+3483251456,3483251711,US
+3483251712,3483253247,US
+3483253248,3483253503,US
+3483253504,3483435007,US
3483435008,3483533311,CA
3483533312,3483631615,US
3483631616,3483697151,CA
@@ -72865,9 +73041,7 @@
3483877376,3483893759,CA
3483893760,3484006911,US
3484006912,3484007167,AU
-3484007168,3484013055,US
-3484013056,3484013567,DE
-3484013568,3484319743,US
+3484007168,3484319743,US
3484320256,3484320511,US
3484321792,3484322047,PR
3484322048,3484323839,US
@@ -72880,11 +73054,7 @@
3484458752,3484459775,CA
3484459776,3484460735,US
3484460736,3484460751,CA
-3484460752,3484468479,US
-3484468480,3484468991,CA
-3484468992,3484469247,US
-3484469248,3484469759,CA
-3484469760,3484472831,US
+3484460752,3484472831,US
3484472832,3484473087,CA
3484473088,3484475903,US
3484475904,3484476159,CA
@@ -72911,21 +73081,13 @@
3485721057,3485721057,AE
3485721058,3485724671,US
3485724672,3485728767,US
-3485728768,3485959679,US
-3485959680,3485960191,CA
-3485960192,3486023679,US
+3485728768,3486023679,US
3486023680,3486031871,CA
3486031872,3486269439,US
3486269440,3486285823,JM
3486285824,3486302207,PR
3486302208,3486310399,CA
-3486310400,3486590463,US
-3486590464,3486590975,GB
-3486590976,3486628863,US
-3486628864,3486629375,PT
-3486629376,3486637823,US
-3486637824,3486638335,SE
-3486638336,3486646271,US
+3486310400,3486646271,US
3486646272,3486662655,CA
3486662656,3486688255,US
3486688256,3486688511,GB
@@ -72964,8 +73126,7 @@
3487766528,3487768575,CA
3487768576,3487842303,US
3487842304,3487858687,CA
-3487858688,3487859199,KY
-3487859200,3487875071,BM
+3487858688,3487875071,BM
3487875072,3487891455,US
3487891456,3487907839,CA
3487907840,3488014335,US
@@ -72982,14 +73143,16 @@
3488290816,3488291839,IN
3488291840,3488300287,US
3488300288,3488300543,A2
-3488300544,3488307711,US
-3488307712,3488308223,IN
+3488300544,3488307199,US
+3488307200,3488308223,IN
3488308224,3488350207,US
3488350208,3488415743,CA
3488415744,3488718847,US
3488718848,3488719615,A2
3488719616,3488720895,US
-3488720896,3488721919,A2
+3488720896,3488721697,A2
+3488721698,3488721698,US
+3488721699,3488721919,A2
3488721920,3488722943,US
3488722944,3488725503,A2
3488725504,3488725759,US
@@ -73010,7 +73173,9 @@
3489577216,3489578239,CN
3489578240,3489673471,US
3489673472,3489673727,PR
-3489673728,3489718271,US
+3489673728,3489685503,US
+3489685504,3489687551,BB
+3489687552,3489718271,US
3489718272,3489718527,AG
3489718528,3489718783,LC
3489718784,3489719807,AG
@@ -73020,11 +73185,7 @@
3489738752,3489740799,PH
3489740800,3489775103,US
3489775104,3489775359,BO
-3489775360,3489969151,US
-3489969152,3489969663,PR
-3489969664,3490228735,US
-3490228736,3490229247,CO
-3490229248,3490263039,US
+3489775360,3490263039,US
3490263040,3490265087,CO
3490265088,3490265343,EC
3490265344,3490267135,CO
@@ -73038,13 +73199,11 @@
3491381248,3491381503,BM
3491381504,3491381759,KY
3491381760,3491389439,BM
-3491389440,3491476991,US
-3491476992,3491478527,VI
+3491389440,3491477503,US
+3491477504,3491478527,VI
3491478528,3491508223,US
3491508224,3491512319,CA
-3491512320,3491637247,US
-3491637248,3491637759,CO
-3491637760,3491651583,US
+3491512320,3491651583,US
3491651584,3491659775,VI
3491659776,3491743743,US
3491743744,3491745791,CO
@@ -73084,7 +73243,9 @@
3492917248,3492917503,VI
3492917504,3492926079,US
3492926080,3492926095,EU
-3492926096,3492934111,US
+3492926096,3492933376,US
+3492933377,3492933377,CH
+3492933378,3492934111,US
3492934112,3492934143,GB
3492934144,3492950863,US
3492950864,3492950879,DE
@@ -73400,8 +73561,8 @@
3495653888,3495654399,CA
3495654400,3495673855,US
3495673856,3495674879,MF
-3495674880,3495675391,VG
-3495675392,3495688191,US
+3495674880,3495675903,VG
+3495675904,3495688191,US
3495688192,3495689215,CA
3495689216,3495694335,US
3495694336,3495696383,CA
@@ -73424,8 +73585,7 @@
3495847936,3495849983,CA
3495849984,3495862271,US
3495862272,3495864319,CA
-3495864320,3495864831,DM
-3495864832,3495865343,GP
+3495864320,3495865343,GP
3495865344,3495866367,US
3495866368,3495868415,LC
3495868416,3495871487,US
@@ -73467,9 +73627,7 @@
3496951808,3496959999,CA
3496960000,3497066495,US
3497066496,3497082879,CA
-3497082880,3497157375,US
-3497157376,3497157887,A2
-3497157888,3497161735,US
+3497082880,3497161735,US
3497161736,3497161743,MT
3497161744,3497161767,US
3497161768,3497161775,MT
@@ -73499,22 +73657,17 @@
3498428416,3498429439,CR
3498429440,3498509055,US
3498509056,3498510335,PR
-3498510336,3498513919,US
-3498513920,3498514431,CL
-3498514432,3498587135,US
+3498510336,3498587135,US
3498587136,3498588159,NL
3498588160,3498708991,US
3498708992,3498717183,JM
3498717184,3498760191,US
3498760192,3498762239,PR
-3498762240,3499403263,US
-3499403264,3499403775,MW
-3499403776,3499450367,US
+3498762240,3499450367,US
3499450368,3499451391,IN
3499451392,3499705343,US
3499705344,3499705855,TZ
-3499705856,3499706367,MG
-3499706368,3499986943,US
+3499705856,3499986943,US
3499986944,3499988991,KY
3499988992,3500015615,US
3500015616,3500016383,AG
@@ -73541,11 +73694,7 @@
3500664871,3500664871,CA
3500664872,3500666751,US
3500666752,3500666879,US
-3500666880,3500689407,US
-3500689408,3500689919,CL
-3500689920,3500707327,US
-3500707328,3500707839,CA
-3500707840,3500728319,US
+3500666880,3500728319,US
3500728320,3500736511,KY
3500736512,3500752895,US
3500752896,3500761087,KY
@@ -73563,31 +73712,15 @@
3501789443,3501789443,US
3501789444,3502470143,US
3502470144,3502471167,MX
-3502471168,3502518783,US
-3502518784,3502519295,LK
-3502519296,3502993407,US
-3502993408,3502993919,NL
-3502993920,3503206399,US
-3503206400,3503206911,CR
-3503206912,3503250431,US
-3503250432,3503250943,PK
-3503250944,3503323135,US
-3503323136,3503323647,KE
-3503323648,3503738879,US
+3502471168,3503738879,US
3503738880,3503740927,CO
3503740928,3503890431,US
3503890432,3503894527,CO
3503894528,3503990783,US
3503990784,3503992831,AE
-3503992832,3504086015,US
-3504086016,3504086527,LI
-3504086528,3504136191,US
+3503992832,3504136191,US
3504136192,3504138239,AZ
-3504138240,3504889343,US
-3504889344,3504889855,PK
-3504889856,3504932351,US
-3504932352,3504932863,BD
-3504932864,3505004543,US
+3504138240,3505004543,US
3505004544,3505005823,PR
3505005824,3505006079,DO
3505006080,3505012735,PR
@@ -73595,12 +73728,10 @@
3505121024,3505121279,PH
3505121280,3505424383,US
3505424384,3505425407,PK
-3505425408,3505661951,US
-3505661952,3505662463,JM
-3505662464,3505818623,US
+3505425408,3505818623,US
3505818624,3505819647,BS
-3505819648,3505999359,US
-3505999360,3506000127,PR
+3505819648,3505999871,US
+3505999872,3506000127,PR
3506000128,3506043135,US
3506043136,3506044927,PA
3506044928,3506231807,US
@@ -73648,11 +73779,7 @@
3508338688,3508404223,CA
3508404224,3508690943,US
3508690944,3508695039,CA
-3508695040,3509112831,US
-3509112832,3509114879,US
-3509114880,3509116159,US
-3509116160,3509116415,US
-3509116416,3509157887,US
+3508695040,3509157887,US
3509157888,3509166079,CA
3509166080,3509215231,US
3509215232,3509223423,CA
@@ -73725,11 +73852,11 @@
3510009856,3510239231,US
3510239232,3510246728,CA
3510246729,3510246729,US
-3510246730,3510249471,CA
-3510249472,3510249983,QA
-3510249984,3510251519,CA
+3510246730,3510251519,CA
3510251520,3510252799,DO
-3510252800,3510269951,CA
+3510252800,3510253953,CA
+3510253954,3510253954,US
+3510253955,3510269951,CA
3510269952,3510270719,LY
3510270720,3510271999,CA
3510272000,3510312959,US
@@ -73754,9 +73881,7 @@
3510479792,3510479799,IE
3510479800,3510788447,US
3510788448,3510788479,GB
-3510788480,3510844415,US
-3510844416,3510844927,CA
-3510844928,3510935551,US
+3510788480,3510935551,US
3510935552,3510943743,CA
3510943744,3511140351,US
3511140352,3511156735,CA
@@ -73802,8 +73927,7 @@
3512237312,3512238079,US
3512238080,3512240127,AW
3512240128,3512241663,BS
-3512241664,3512242175,CO
-3512242176,3512242687,US
+3512241664,3512242687,US
3512242688,3512244991,EG
3512244992,3512246015,IL
3512246016,3512246783,CL
@@ -73814,8 +73938,7 @@
3512260608,3512261631,GU
3512261632,3512262911,US
3512262912,3512263679,GT
-3512263680,3512264703,VE
-3512264704,3512267263,US
+3512263680,3512267263,US
3512267264,3512268031,TG
3512268032,3512270847,US
3512270848,3512336383,CA
@@ -73853,22 +73976,22 @@
3513499648,3513778175,US
3513778176,3513794559,CA
3513794560,3513840127,US
-3513840128,3513840383,US
-3513840384,3514007551,US
+3513840128,3513840639,US
+3513840640,3514007551,US
3514007552,3514040319,CA
-3514040320,3514367999,US
+3514040320,3514207999,US
+3514208000,3514208255,US
+3514208256,3514367999,US
3514368000,3514433535,CA
3514433536,3514580991,US
3514580992,3514589183,GB
-3514589184,3514590207,US
-3514590208,3514590719,NI
+3514589184,3514590719,US
3514590720,3514591103,SV
-3514591104,3514591743,US
-3514591744,3514592255,NI
-3514592256,3514593279,SV
-3514593280,3514596863,US
-3514596864,3514597375,SV
-3514597376,3514826751,US
+3514591104,3514592255,US
+3514592256,3514592767,SV
+3514592768,3514596863,US
+3514596864,3514597119,SV
+3514597120,3514826751,US
3514826752,3514843135,CA
3514843136,3514993919,US
3514993920,3514993983,GB
@@ -73903,8 +74026,7 @@
3516366848,3516370943,CA
3516370944,3516514303,US
3516514304,3516530687,CA
-3516530688,3516899327,US
-3516899328,3516899839,A2
+3516530688,3516899839,US
3516899840,3516900095,NG
3516900096,3516903423,US
3516903424,3516907519,CA
@@ -73950,21 +74072,15 @@
3517403904,3517404159,CA
3517404160,3517409791,US
3517409792,3517410047,CA
-3517410048,3517410303,US
-3517410304,3517410815,CA
-3517410816,3517411839,US
+3517410048,3517411839,US
3517411840,3517412095,CA
3517412096,3517416191,US
3517416192,3517416447,CA
3517416448,3517423103,US
3517423104,3517423359,CA
-3517423360,3517423423,US
-3517423424,3517423455,CA
-3517423456,3517431903,US
+3517423360,3517431903,US
3517431904,3517431935,CA
-3517431936,3517438943,US
-3517438944,3517438975,CA
-3517438976,3517441279,US
+3517431936,3517441279,US
3517441280,3517441535,CA
3517441536,3517447863,US
3517447864,3517447871,CA
@@ -73973,13 +74089,9 @@
3517562880,3517595647,US
3517595648,3517596671,SE
3517596672,3517596927,US
-3517596928,3517597183,SE
-3517597184,3517597695,US
-3517597696,3517599359,SE
+3517596928,3517599359,SE
3517599360,3517599615,US
-3517599616,3517600767,SE
-3517600768,3517601279,US
-3517601280,3517602687,SE
+3517599616,3517602687,SE
3517602688,3517602815,US
3517602816,3517603327,SE
3517603328,3517603583,US
@@ -74030,9 +74142,7 @@
3519554048,3519554175,US
3519554176,3519676415,US
3519676416,3519709183,CA
-3519709184,3519723519,US
-3519723520,3519724031,CA
-3519724032,3519741951,US
+3519709184,3519741951,US
3519741952,3519758335,ZA
3519758336,3519873023,US
3519873024,3519901695,CA
@@ -74049,19 +74159,25 @@
3520413440,3520413695,CA
3520413696,3520454655,US
3520454656,3520462847,CA
-3520462848,3520527871,US
-3520527872,3520528383,A2
-3520528384,3520626687,US
+3520462848,3520626687,US
3520626688,3520634879,CA
3520634880,3520644607,US
3520644608,3520644863,US
-3520644864,3520650239,US
+3520644864,3520648703,US
+3520648704,3520648959,US
+3520648960,3520650239,US
3520650240,3520650495,US
-3520650496,3520652287,US
+3520650496,3520651775,US
+3520651776,3520652031,US
+3520652032,3520652287,US
3520652288,3520652543,US
-3520652544,3520656383,US
+3520652544,3520654079,US
+3520654080,3520654335,US
+3520654336,3520656383,US
3520656384,3520656639,US
-3520656640,3520658943,US
+3520656640,3520657407,US
+3520657408,3520657663,US
+3520657664,3520658943,US
3520658944,3520659199,US
3520659200,3520675839,US
3520675840,3520692223,CA
@@ -74150,10 +74266,7 @@
3523682304,3523686399,NZ
3523686400,3523690495,AU
3523690496,3523698687,IN
-3523698688,3523699199,JP
-3523699200,3523699711,US
-3523699712,3523707391,JP
-3523707392,3523707903,GB
+3523698688,3523707903,JP
3523707904,3523708159,AU
3523708160,3523709183,JP
3523709184,3523709951,CN
@@ -74337,8 +74450,8 @@
3547917312,3548905471,JP
3548905472,3551002623,CN
3551002624,3556769791,KR
-3556769792,3556774399,DE
-3556774400,3556786175,EU
+3556769792,3556773887,DE
+3556773888,3556786175,EU
3556786176,3556794367,RU
3556794368,3556802559,ES
3556802560,3556810751,SD
@@ -74370,11 +74483,7 @@
3556999168,3557007359,RU
3557007360,3557015551,IT
3557015552,3557023743,DE
-3557023744,3557024255,GB
-3557024256,3557024767,BE
-3557024768,3557026303,GB
-3557026304,3557026815,BE
-3557026816,3557031935,GB
+3557023744,3557031935,GB
3557031936,3557040127,IT
3557040128,3557048319,NO
3557048320,3557056511,CH
@@ -74396,9 +74505,7 @@
3557244928,3557253119,IT
3557253120,3557261311,RU
3557261312,3557277695,DE
-3557277696,3557278710,NL
-3557278711,3557278714,CH
-3557278715,3557283839,NL
+3557277696,3557283839,NL
3557283840,3557284863,PL
3557284864,3557285887,NL
3557285888,3557294079,RU
@@ -74408,13 +74515,9 @@
3557326848,3557335039,DE
3557335040,3557339135,EU
3557339136,3557339391,BE
-3557339392,3557339647,EU
-3557339648,3557340159,BE
-3557340160,3557340287,EU
+3557339392,3557340287,EU
3557340288,3557340927,BE
-3557340928,3557341951,EU
-3557341952,3557342463,BE
-3557342464,3557343231,EU
+3557340928,3557343231,EU
3557343232,3557351423,DE
3557351424,3557359615,RU
3557359616,3557360127,JE
@@ -74478,8 +74581,8 @@
3557860864,3557861983,SE
3557861984,3557862015,FI
3557862016,3557862399,SE
-3557862400,3557862911,FI
-3557862912,3557864287,SE
+3557862400,3557862655,FI
+3557862656,3557864287,SE
3557864288,3557864303,DK
3557864304,3557864311,SE
3557864312,3557864319,FI
@@ -74541,10 +74644,10 @@
3558170624,3558178815,GB
3558178816,3558187007,BG
3558187008,3558195199,DE
-3558195200,3558196735,GB
-3558196736,3558199039,US
+3558195200,3558197247,GB
+3558197248,3558199039,US
3558199040,3558199295,ES
-3558199296,3558203391,US
+3558199296,3558203391,GB
3558203392,3558211583,ES
3558211584,3558219775,GB
3558219776,3558227967,ES
@@ -74561,7 +74664,9 @@
3558286848,3558288639,GB
3558288640,3558288895,EU
3558288896,3558289151,FR
-3558289152,3558289975,GB
+3558289152,3558289431,GB
+3558289432,3558289439,NL
+3558289440,3558289975,GB
3558289976,3558289983,CZ
3558289984,3558290431,GB
3558290432,3558290687,BE
@@ -74572,7 +74677,9 @@
3558291312,3558292223,GB
3558292224,3558292479,SE
3558292480,3558292735,EU
-3558292736,3558293503,GB
+3558292736,3558293055,GB
+3558293056,3558293087,NL
+3558293088,3558293503,GB
3558293504,3558301695,RU
3558301696,3558318079,DE
3558318080,3558334463,FR
@@ -74593,9 +74700,7 @@
3558440960,3558449151,SE
3558449152,3558457343,IT
3558457344,3558465535,NL
-3558465536,3558468607,GB
-3558468608,3558469119,US
-3558469120,3558473727,GB
+3558465536,3558473727,GB
3558473728,3558506495,SA
3558506496,3558514687,UA
3558514688,3558522879,SK
@@ -74625,9 +74730,7 @@
3558718208,3558718463,EU
3558718464,3558719487,NL
3558719488,3558735871,IL
-3558735872,3558737919,GG
-3558737920,3558738431,GB
-3558738432,3558743039,GG
+3558735872,3558743039,GG
3558743040,3558744063,GB
3558744064,3558752255,LB
3558752256,3558760447,SI
@@ -74695,8 +74798,7 @@
3559129088,3559137279,BG
3559137280,3559145471,GB
3559145472,3559153663,ES
-3559153664,3559177727,GB
-3559177728,3559178239,DE
+3559153664,3559178239,GB
3559178240,3559186431,LB
3559186432,3559194623,RU
3559194624,3559202815,SE
@@ -74716,9 +74818,7 @@
3559291392,3559291647,AZ
3559291648,3559292927,RU
3559292928,3559301119,JO
-3559301120,3559305215,GB
-3559305216,3559305727,US
-3559305728,3559309311,GB
+3559301120,3559309311,GB
3559309312,3559317503,PL
3559317504,3559325695,FI
3559325696,3559333887,IT
@@ -74740,15 +74840,15 @@
3559448576,3559456767,ES
3559456768,3559473151,RU
3559473152,3559489535,CH
-3559489536,3559489791,GB
-3559489792,3559490303,NL
-3559490304,3559491071,GB
+3559489536,3559491071,GB
3559491072,3559491327,NL
3559491328,3559491583,GB
3559491584,3559491839,NL
-3559491840,3559492607,GB
-3559492608,3559497471,NL
-3559497472,3559505919,GB
+3559491840,3559493119,GB
+3559493120,3559493375,NL
+3559493376,3559496703,GB
+3559496704,3559496959,NL
+3559496960,3559505919,GB
3559505920,3559514111,CH
3559514112,3559522303,AT
3559522304,3559530495,GB
@@ -74794,7 +74894,9 @@
3559874560,3559882751,LT
3559882752,3559890943,AZ
3559890944,3559899135,CH
-3559899136,3559902975,UA
+3559899136,3559900223,UA
+3559900224,3559900287,EE
+3559900288,3559902975,UA
3559902976,3559907327,EE
3559907328,3559915519,FR
3559915520,3559923711,IT
@@ -74808,16 +74910,17 @@
3559989248,3559997439,PL
3559997440,3560005631,KE
3560005632,3560013823,RU
-3560013824,3560014847,ES
-3560014848,3560015871,GB
+3560013824,3560015871,GB
3560015872,3560016127,ES
-3560016128,3560016895,GB
-3560016896,3560017663,ES
+3560016128,3560017407,GB
+3560017408,3560017663,ES
3560017664,3560021247,GB
3560021248,3560021503,ES
3560021504,3560022527,GB
3560022528,3560023039,ES
-3560023040,3560023791,GB
+3560023040,3560023631,GB
+3560023632,3560023639,ES
+3560023640,3560023791,GB
3560023792,3560023799,ES
3560023800,3560023807,GB
3560023808,3560024063,ES
@@ -74856,11 +74959,7 @@
3560316928,3560325119,NL
3560325120,3560333311,DK
3560333312,3560341503,RO
-3560341504,3560344575,GB
-3560344576,3560345087,MA
-3560345088,3560345599,GB
-3560345600,3560346111,US
-3560346112,3560346623,GB
+3560341504,3560346623,GB
3560346624,3560347647,US
3560347648,3560357887,GB
3560357888,3560366079,GR
@@ -74929,7 +75028,9 @@
3560943843,3560943843,GB
3560943844,3560944139,DE
3560944140,3560944143,US
-3560944144,3560944567,DE
+3560944144,3560944391,DE
+3560944392,3560944395,US
+3560944396,3560944567,DE
3560944568,3560944571,US
3560944572,3560944607,DE
3560944608,3560944611,US
@@ -74943,7 +75044,9 @@
3560945796,3560945799,US
3560945800,3560946219,DE
3560946220,3560946220,US
-3560946221,3560946283,DE
+3560946221,3560946252,DE
+3560946253,3560946253,US
+3560946254,3560946283,DE
3560946284,3560946284,US
3560946285,3560947059,DE
3560947060,3560947063,US
@@ -75019,11 +75122,7 @@
3561472000,3561480191,DE
3561480192,3561488383,GB
3561488384,3561496575,OM
-3561496576,3561497599,GB
-3561497600,3561498111,NL
-3561498112,3561498623,GB
-3561498624,3561500159,NL
-3561500160,3561502719,GB
+3561496576,3561502719,GB
3561502720,3561503743,NL
3561503744,3561504767,GB
3561504768,3561512959,DE
@@ -75038,15 +75137,9 @@
3561578496,3561586687,RU
3561586688,3561594879,BG
3561594880,3561603071,SE
-3561603072,3561605631,GB
-3561605632,3561606143,FR
-3561606144,3561606655,GB
-3561606656,3561607167,FR
-3561607168,3561609215,GB
-3561609216,3561609727,FR
-3561609728,3561615871,GB
-3561615872,3561616383,FR
-3561616384,3561618943,GB
+3561603072,3561609215,GB
+3561609216,3561609471,FR
+3561609472,3561618943,GB
3561618944,3561619455,ES
3561619456,3561641450,GB
3561641451,3561641451,FR
@@ -75086,11 +75179,11 @@
3561914368,3561922559,ES
3561922560,3561925009,GB
3561925010,3561925010,NL
-3561925011,3561925119,GB
-3561925120,3561925631,NL
-3561925632,3561927551,GB
-3561927552,3561928191,NL
-3561928192,3561930751,GB
+3561925011,3561927551,GB
+3561927552,3561927679,NL
+3561927680,3561929967,GB
+3561929968,3561929983,NL
+3561929984,3561930751,GB
3561930752,3561938943,NL
3561938944,3561940991,IE
3561940992,3561942015,GB
@@ -75106,8 +75199,24 @@
3562020864,3562029055,UA
3562029056,3562037247,CZ
3562037248,3562045439,CH
-3562045440,3562061823,ES
-3562061824,3562070015,IT
+3562045440,3562056711,ES
+3562056712,3562056719,NL
+3562056720,3562056911,ES
+3562056912,3562056927,FR
+3562056928,3562057215,ES
+3562057216,3562057247,NL
+3562057248,3562057263,BE
+3562057264,3562057471,ES
+3562057472,3562057727,DE
+3562057728,3562057975,ES
+3562057976,3562057983,FR
+3562057984,3562059327,ES
+3562059328,3562059335,CH
+3562059336,3562059391,ES
+3562059392,3562059519,CH
+3562059520,3562059647,ES
+3562059648,3562059775,CH
+3562059776,3562061823,ES
3562070016,3562078207,DE
3562078208,3562086399,SK
3562086400,3562087423,SE
@@ -75149,12 +75258,7 @@
3562364928,3562373119,PL
3562373120,3562381311,FR
3562381312,3562389503,SI
-3562389504,3562395647,GH
-3562395648,3562395903,BR
-3562395904,3562396159,TZ
-3562396160,3562396927,SZ
-3562396928,3562397183,GH
-3562397184,3562397695,SZ
+3562389504,3562397695,GH
3562397696,3562405887,GB
3562405888,3562414079,FI
3562414080,3562422271,DE
@@ -75221,11 +75325,7 @@
3562971136,3562987519,FR
3562987520,3562995711,DE
3562995712,3563003903,AT
-3563003904,3563005951,DE
-3563005952,3563006463,TR
-3563006464,3563007487,DE
-3563007488,3563007999,TR
-3563008000,3563008255,DE
+3563003904,3563008255,DE
3563008256,3563008511,PL
3563008512,3563010815,DE
3563010816,3563011071,PL
@@ -75241,10 +75341,8 @@
3563067392,3563068415,MZ
3563068416,3563069439,NG
3563069440,3563077631,HU
-3563077632,3563078399,KZ
-3563078400,3563078911,SE
-3563078912,3563079679,KZ
-3563079680,3563085823,SE
+3563077632,3563079423,KZ
+3563079424,3563085823,SE
3563085824,3563094015,RU
3563094016,3563102207,DE
3563102208,3563110399,CZ
@@ -75254,9 +75352,7 @@
3563134976,3563143167,IT
3563143168,3563151359,GB
3563151360,3563159551,DE
-3563159552,3563163647,DK
-3563163648,3563164159,SE
-3563164160,3563167743,DK
+3563159552,3563167743,DK
3563167744,3563175935,ES
3563175936,3563192319,DK
3563192320,3563200511,TR
@@ -75321,15 +75417,13 @@
3563741184,3563749375,GB
3563749376,3563765759,PL
3563765760,3563782143,ES
-3563782144,3563790335,GR
3563790336,3563798527,EE
3563798528,3563806719,FR
3563806720,3563814911,SA
3563814912,3563823103,SE
3563823104,3563831295,DE
3563831296,3563847679,RU
-3563847680,3563848191,NL
-3563848192,3563848639,GB
+3563847680,3563848639,GB
3563848640,3563848645,IT
3563848646,3563848646,NL
3563848647,3563848655,IT
@@ -75369,9 +75463,7 @@
3564023808,3564024831,IT
3564024832,3564027903,GB
3564027904,3564036095,DE
-3564036096,3564039167,A2
-3564039168,3564039679,DE
-3564039680,3564043263,A2
+3564036096,3564043263,A2
3564043264,3564044287,DE
3564044288,3564052479,CZ
3564052480,3564060671,GB
@@ -75400,16 +75492,14 @@
3564208128,3564216319,GB
3564216320,3564224511,PT
3564224512,3564232703,GB
-3564232704,3564240895,RU
-3564240896,3564241407,TJ
-3564241408,3564249087,RU
+3564232704,3564249087,RU
3564249088,3564265471,DE
3564265472,3564273663,NL
3564273664,3564306431,DE
3564306432,3564314623,TR
3564314624,3564322815,GB
3564322816,3564331007,IT
-3564331008,3564339199,ES
+3564331008,3564332031,ES
3564339200,3564355583,GB
3564355584,3564363775,NL
3564363776,3564371967,UA
@@ -75430,8 +75520,7 @@
3564470272,3564478463,IL
3564478464,3564486655,LU
3564486656,3564494847,CH
-3564494848,3564495203,GB
-3564495204,3564503039,EU
+3564494848,3564503039,EU
3564503040,3564511231,JO
3564511232,3564519423,RU
3564519424,3564527615,SI
@@ -75439,7 +75528,9 @@
3564544000,3564560383,DE
3564560384,3564560531,GB
3564560532,3564560532,EU
-3564560533,3564572427,GB
+3564560533,3564571695,GB
+3564571696,3564571703,DE
+3564571704,3564572427,GB
3564572428,3564572431,ES
3564572432,3564576767,GB
3564576768,3564584959,RU
@@ -75467,7 +75558,9 @@
3564736000,3564736255,DE
3564736256,3564738815,GB
3564738816,3564739071,DE
-3564739072,3564740385,GB
+3564739072,3564739345,GB
+3564739346,3564739346,DE
+3564739347,3564740385,GB
3564740386,3564740386,DE
3564740387,3564740535,GB
3564740536,3564740539,DE
@@ -75492,7 +75585,9 @@
3564847104,3564855295,IT
3564855296,3564863487,DE
3564863488,3564879871,NL
-3564879872,3564882431,GB
+3564879872,3564882015,GB
+3564882016,3564882031,NL
+3564882032,3564882431,GB
3564882432,3564882687,EU
3564882688,3564883199,GB
3564883200,3564883455,NL
@@ -75503,8 +75598,8 @@
3564886752,3564892415,GB
3564892416,3564892927,NL
3564892928,3564894207,GB
-3564894208,3564895743,NL
-3564895744,3564896255,GB
+3564894208,3564895231,NL
+3564895232,3564896255,GB
3564896256,3564904447,RU
3564904448,3564912639,DE
3564912640,3564920831,BG
@@ -75521,7 +75616,9 @@
3564954880,3564955903,GB
3564955904,3564956671,AT
3564956672,3564956927,GB
-3564956928,3564961791,AT
+3564956928,3564958850,AT
+3564958851,3564958851,EU
+3564958852,3564961791,AT
3564961792,3564969983,TR
3564969984,3564978175,DE
3564978176,3564986367,GB
@@ -75533,7 +75630,9 @@
3565036288,3565038591,GB
3565038592,3565038847,IE
3565038848,3565039615,GB
-3565039616,3565042175,IE
+3565039616,3565041663,IE
+3565041664,3565041919,GB
+3565041920,3565042175,IE
3565042176,3565043711,GB
3565043712,3565051903,AT
3565051904,3565060095,IQ
@@ -75560,23 +75659,165 @@
3565495296,3565496319,FR
3565496320,3565502463,GB
3565502464,3565503487,NL
-3565503488,3565510911,GB
-3565510912,3565511295,NL
-3565511296,3565518847,GB
+3565503488,3565518847,GB
3565518848,3565551615,TR
3565551616,3565682687,GB
-3565682688,3565748223,NL
-3565748224,3565750271,EU
-3565750272,3565752319,GB
-3565752320,3565756415,EU
-3565756416,3565760511,GB
-3565760512,3565764375,EU
-3565764376,3565764383,GB
-3565764384,3565764607,EU
-3565764608,3565766655,GB
-3565766656,3565767423,EU
-3565767424,3565767679,GB
-3565767680,3565777919,EU
+3565682688,3565684995,NL
+3565684996,3565684996,EU
+3565684997,3565748223,NL
+3565748224,3565752839,GB
+3565752840,3565752855,EU
+3565752856,3565752879,GB
+3565752880,3565752887,EU
+3565752888,3565752983,GB
+3565752984,3565752991,EU
+3565752992,3565752999,GB
+3565753000,3565753015,EU
+3565753016,3565753031,GB
+3565753032,3565753039,EU
+3565753040,3565753071,GB
+3565753072,3565753079,EU
+3565753080,3565753183,GB
+3565753184,3565753247,EU
+3565753248,3565753279,GB
+3565753280,3565753343,EU
+3565753344,3565753791,GB
+3565753792,3565753799,EU
+3565753800,3565753815,GB
+3565753816,3565753823,EU
+3565753824,3565753831,GB
+3565753832,3565753839,EU
+3565753840,3565753847,GB
+3565753848,3565753983,EU
+3565753984,3565754367,GB
+3565754368,3565754495,EU
+3565754496,3565754511,GB
+3565754512,3565754623,EU
+3565754624,3565755263,GB
+3565755264,3565755279,EU
+3565755280,3565755359,GB
+3565755360,3565755375,EU
+3565755376,3565755583,GB
+3565755584,3565755647,EU
+3565755648,3565755695,GB
+3565755696,3565755703,EU
+3565755704,3565755727,GB
+3565755728,3565755735,EU
+3565755736,3565755831,GB
+3565755832,3565755839,EU
+3565755840,3565755847,GB
+3565755848,3565755855,EU
+3565755856,3565755871,GB
+3565755872,3565755879,EU
+3565755880,3565755919,GB
+3565755920,3565755927,EU
+3565755928,3565755935,GB
+3565755936,3565755943,EU
+3565755944,3565755959,GB
+3565755960,3565755967,EU
+3565755968,3565755999,GB
+3565756000,3565756007,EU
+3565756008,3565756063,GB
+3565756064,3565756071,EU
+3565756072,3565756087,GB
+3565756088,3565756095,EU
+3565756096,3565756119,GB
+3565756120,3565756135,EU
+3565756136,3565756159,GB
+3565756160,3565756287,EU
+3565756288,3565760783,GB
+3565760784,3565760791,EU
+3565760792,3565760799,GB
+3565760800,3565760807,EU
+3565760808,3565760823,GB
+3565760824,3565760831,EU
+3565760832,3565760855,GB
+3565760856,3565760863,EU
+3565760864,3565760935,GB
+3565760936,3565760943,EU
+3565760944,3565760967,GB
+3565760968,3565760975,EU
+3565760976,3565761007,GB
+3565761008,3565761015,EU
+3565761016,3565761279,GB
+3565761280,3565761343,EU
+3565761344,3565761535,GB
+3565761536,3565761543,EU
+3565761544,3565761599,GB
+3565761600,3565761615,EU
+3565761616,3565761631,GB
+3565761632,3565761639,EU
+3565761640,3565761647,GB
+3565761648,3565761655,EU
+3565761656,3565761687,GB
+3565761688,3565761703,EU
+3565761704,3565761727,GB
+3565761728,3565761751,EU
+3565761752,3565761783,GB
+3565761784,3565761791,EU
+3565761792,3565762047,GB
+3565762048,3565762303,ZA
+3565762304,3565762559,EU
+3565762560,3565762815,GB
+3565762816,3565763071,EU
+3565763072,3565763455,GB
+3565763456,3565763487,EU
+3565763488,3565763599,GB
+3565763600,3565763615,EU
+3565763616,3565763671,GB
+3565763672,3565763679,EU
+3565763680,3565763703,GB
+3565763704,3565763719,EU
+3565763720,3565763735,GB
+3565763736,3565763743,EU
+3565763744,3565763751,GB
+3565763752,3565763759,EU
+3565763760,3565763799,GB
+3565763800,3565763807,EU
+3565763808,3565763815,GB
+3565763816,3565763831,EU
+3565763832,3565763839,GB
+3565763840,3565763883,EU
+3565763884,3565763891,GB
+3565763892,3565764095,EU
+3565764096,3565764183,GB
+3565764184,3565764191,EU
+3565764192,3565764207,GB
+3565764208,3565764255,EU
+3565764256,3565764367,GB
+3565764368,3565764375,EU
+3565764376,3565764439,GB
+3565764440,3565764447,EU
+3565764448,3565764455,GB
+3565764456,3565764463,EU
+3565764464,3565764551,GB
+3565764552,3565764575,EU
+3565764576,3565766655,GB
+3565766656,3565766911,EU
+3565766912,3565767167,GB
+3565767168,3565767175,EU
+3565767176,3565767255,GB
+3565767256,3565767271,EU
+3565767272,3565767287,GB
+3565767288,3565767295,EU
+3565767296,3565767351,GB
+3565767352,3565767359,EU
+3565767360,3565767399,GB
+3565767400,3565767407,EU
+3565767408,3565767999,GB
+3565768000,3565768207,EU
+3565768208,3565768271,GB
+3565768272,3565768279,EU
+3565768280,3565768295,GB
+3565768296,3565768311,EU
+3565768312,3565768335,GB
+3565768336,3565768447,EU
+3565768448,3565768575,GB
+3565768576,3565768703,EU
+3565768704,3565768983,GB
+3565768984,3565769215,EU
+3565769216,3565769471,GB
+3565769472,3565777919,EU
3565777920,3565813759,GB
3565813760,3565879295,SA
3565879296,3566010367,GB
@@ -75602,7 +75843,9 @@
3566607616,3566647403,IL
3566647404,3566647404,IL
3566647405,3566665727,IL
-3566665728,3566739455,SE
+3566665728,3566723287,SE
+3566723288,3566723543,RU
+3566723544,3566739455,SE
3566739456,3566747647,RU
3566747648,3566764031,GR
3566764032,3566796799,AT
@@ -75614,13 +75857,127 @@
3566977024,3566993407,FR
3566993408,3567058943,TR
3567058944,3567124479,FR
-3567124480,3567141631,EU
+3567124480,3567124991,EU
+3567124992,3567125023,GB
+3567125024,3567125247,EU
+3567125248,3567125503,GB
+3567125504,3567126687,EU
+3567126688,3567126759,GB
+3567126760,3567127551,EU
+3567127552,3567127807,GB
+3567127808,3567129855,EU
+3567129856,3567129887,GB
+3567129888,3567130015,EU
+3567130016,3567130079,GB
+3567130080,3567131383,EU
+3567131384,3567131647,GB
+3567131648,3567133215,EU
+3567133216,3567133247,GB
+3567133248,3567133367,EU
+3567133368,3567133375,GB
+3567133376,3567134207,EU
+3567134208,3567134335,GB
+3567134336,3567134847,EU
+3567134848,3567134975,GB
+3567134976,3567135999,EU
+3567136000,3567136255,GB
+3567136256,3567136511,EU
+3567136512,3567136575,GB
+3567136576,3567136639,EU
+3567136640,3567136671,GB
+3567136672,3567136767,EU
+3567136768,3567136895,GB
+3567136896,3567137023,EU
+3567137024,3567137279,GB
+3567137280,3567137599,EU
+3567137600,3567137663,GB
+3567137664,3567137987,EU
+3567137988,3567137991,GB
+3567137992,3567137999,EU
+3567138000,3567138003,GB
+3567138004,3567138039,EU
+3567138040,3567138047,GB
+3567138048,3567140095,EU
+3567140096,3567140351,GB
+3567140352,3567140863,EU
+3567140864,3567140927,GB
+3567140928,3567141631,EU
3567141632,3567141887,GB
-3567141888,3567149919,EU
+3567141888,3567142271,EU
+3567142272,3567142399,GB
+3567142400,3567143431,EU
+3567143432,3567143439,GB
+3567143440,3567143519,EU
+3567143520,3567143551,GB
+3567143552,3567143679,EU
+3567143680,3567143687,GB
+3567143688,3567143871,EU
+3567143872,3567143935,GB
+3567143936,3567143951,EU
+3567143952,3567143967,GB
+3567143968,3567144171,EU
+3567144172,3567144175,GB
+3567144176,3567144319,EU
+3567144320,3567144447,GB
+3567144448,3567144767,EU
+3567144768,3567144831,GB
+3567144832,3567147527,EU
+3567147528,3567147535,GB
+3567147536,3567147551,EU
+3567147552,3567147559,GB
+3567147560,3567148519,EU
+3567148520,3567148527,GB
+3567148528,3567148799,EU
+3567148800,3567149055,GB
+3567149056,3567149087,EU
+3567149088,3567149119,GB
+3567149120,3567149903,EU
+3567149904,3567149911,GB
+3567149912,3567149919,EU
3567149920,3567149935,GB
-3567149936,3567155199,EU
-3567155200,3567155711,GB
-3567155712,3567157247,EU
+3567149936,3567151135,EU
+3567151136,3567151199,GB
+3567151200,3567151231,EU
+3567151232,3567151263,GB
+3567151264,3567151999,EU
+3567152000,3567152127,GB
+3567152128,3567152159,EU
+3567152160,3567152191,GB
+3567152192,3567152255,EU
+3567152256,3567152383,GB
+3567152384,3567152399,EU
+3567152400,3567152407,GB
+3567152408,3567152639,EU
+3567152640,3567152647,GB
+3567152648,3567152663,EU
+3567152664,3567152671,GB
+3567152672,3567152743,EU
+3567152744,3567152751,GB
+3567152752,3567152831,EU
+3567152832,3567152863,GB
+3567152864,3567152959,EU
+3567152960,3567152991,GB
+3567152992,3567153023,EU
+3567153024,3567153055,GB
+3567153056,3567153599,EU
+3567153600,3567153607,GB
+3567153608,3567153615,EU
+3567153616,3567153623,GB
+3567153624,3567153647,EU
+3567153648,3567153663,GB
+3567153664,3567153687,EU
+3567153688,3567153703,GB
+3567153704,3567153719,EU
+3567153720,3567153727,GB
+3567153728,3567153823,EU
+3567153824,3567153847,GB
+3567153848,3567154303,EU
+3567154304,3567154367,GB
+3567154368,3567155199,EU
+3567155200,3567155967,GB
+3567155968,3567156415,EU
+3567156416,3567156607,GB
+3567156608,3567157247,EU
3567157248,3567165439,CZ
3567165440,3567169535,RU
3567169536,3567173631,MK
@@ -75653,54 +76010,39 @@
3567455744,3567455999,ES
3567456000,3567456415,GB
3567456416,3567456431,ES
-3567456432,3567456767,GB
-3567456768,3567457791,ES
-3567457792,3567459935,GB
+3567456432,3567459935,GB
3567459936,3567459943,ES
-3567459944,3567461119,GB
-3567461120,3567461631,ES
-3567461632,3567463423,GB
+3567459944,3567463423,GB
3567463424,3567463679,ES
3567463680,3567465983,GB
3567465984,3567466239,ES
-3567466240,3567466751,GB
-3567466752,3567467263,ES
-3567467264,3567468543,GB
-3567468544,3567468800,ES
-3567468801,3567470079,GB
-3567470080,3567470591,ES
-3567470592,3567472639,GB
-3567472640,3567474687,ES
-3567474688,3567476735,GB
-3567476736,3567477247,ES
-3567477248,3567478783,GB
-3567478784,3567484927,ES
-3567484928,3567486975,GB
-3567486976,3567487999,ES
-3567488000,3567490559,GB
+3567466240,3567490559,GB
3567490560,3567491071,ES
3567491072,3567495167,GB
3567495168,3567495423,ES
-3567495424,3567495679,GB
-3567495680,3567495935,ES
-3567495936,3567497215,GB
-3567497216,3567497727,ES
-3567497728,3567503359,GB
+3567495424,3567503359,GB
3567503360,3567504383,ES
3567504384,3567505151,GB
3567505152,3567505407,ES
-3567505408,3567507455,GB
-3567507456,3567509503,NL
-3567509504,3567509759,GB
-3567509760,3567510271,ES
-3567510272,3567511487,GB
+3567505408,3567511487,GB
3567511488,3567511495,ES
-3567511496,3567512575,GB
-3567512576,3567513599,NL
-3567513600,3567515647,GB
-3567515648,3567517695,ES
+3567511496,3567516671,GB
+3567516672,3567517695,ES
3567517696,3567583231,RU
-3567583232,3567587327,EU
+3567583232,3567583487,AT
+3567583488,3567583743,EU
+3567583744,3567583871,AT
+3567583872,3567583935,EU
+3567583936,3567583999,AT
+3567584000,3567584255,EU
+3567584256,3567584383,AT
+3567584384,3567584399,EU
+3567584400,3567584407,AT
+3567584408,3567584511,EU
+3567584512,3567584639,AT
+3567584640,3567585791,EU
+3567585792,3567586303,GB
+3567586304,3567587327,EU
3567587328,3567591423,GB
3567591424,3567599615,IT
3567599616,3567615999,NL
@@ -75712,15 +76054,11 @@
3567618048,3567619071,IN
3567619072,3567619583,A2
3567619584,3567619839,NG
-3567619840,3567620095,TZ
+3567619840,3567620095,A2
3567620096,3567620351,IN
-3567620352,3567624703,A2
-3567624704,3567625215,LR
-3567625216,3567625727,TZ
-3567625728,3567626239,A2
+3567620352,3567626239,A2
3567626240,3567626751,TZ
-3567626752,3567627008,NG
-3567627009,3567647487,A2
+3567626752,3567647487,A2
3567647488,3567648767,GB
3567648768,3567665151,BE
3567665152,3567673343,ES
@@ -75792,9 +76130,7 @@
3569167872,3569168127,EU
3569168128,3569188863,NL
3569188864,3569221631,IT
-3569221632,3569251327,BE
-3569251328,3569251839,US
-3569251840,3569277183,BE
+3569221632,3569277183,BE
3569277184,3569277439,LU
3569277440,3569287167,BE
3569287168,3569352703,PL
@@ -75803,9 +76139,7 @@
3569614848,3569680383,GB
3569680384,3569713151,SK
3569713152,3569729535,AT
-3569729536,3569741311,FR
-3569741312,3569741823,BE
-3569741824,3569811175,FR
+3569729536,3569811175,FR
3569811176,3569811176,GP
3569811177,3569811455,FR
3569811456,3569876991,IL
@@ -75824,9 +76158,7 @@
3570401280,3570466815,FR
3570466816,3570532351,SE
3570532352,3570597887,IT
-3570597888,3570607103,GB
-3570607104,3570608127,DE
-3570608128,3570614271,GB
+3570597888,3570614271,GB
3570614272,3570617343,DE
3570617344,3570618367,GB
3570618368,3570622207,DE
@@ -75859,12 +76191,12 @@
3571343394,3571343394,DE
3571343395,3571351551,GB
3571351552,3571351807,DE
-3571351808,3571357183,GB
-3571357184,3571357695,DE
-3571357696,3571361279,GB
+3571351808,3571361279,GB
3571361280,3571361535,DE
3571361536,3571384319,GB
-3571384320,3571482623,DE
+3571384320,3571474431,DE
+3571474432,3571475455,US
+3571475456,3571482623,DE
3571482624,3571515391,BE
3571515392,3571548159,GB
3571548160,3571580927,ES
@@ -75946,34 +76278,27 @@
3574005760,3574071295,CY
3574071296,3574136831,IL
3574136832,3574169599,DE
-3574169600,3574172159,ES
-3574172160,3574176511,GB
-3574176512,3574177023,ES
-3574177024,3574178815,GB
-3574178816,3574180863,ES
-3574180864,3574182143,GB
+3574169600,3574182143,GB
3574182144,3574182399,ES
3574182400,3574183167,GB
3574183168,3574183679,ES
-3574183680,3574184191,GB
-3574184192,3574184703,ES
-3574184704,3574186751,GB
-3574186752,3574190079,ES
-3574190080,3574190591,GB
+3574183680,3574186751,GB
+3574186752,3574188031,ES
+3574188032,3574190591,GB
3574190592,3574190847,EU
3574190848,3574191103,ES
3574191104,3574195199,GB
3574195200,3574196223,ES
-3574196224,3574197247,GB
-3574197248,3574197759,ES
-3574197760,3574198271,GB
+3574196224,3574198271,GB
3574198272,3574199295,ES
3574199296,3574199807,GB
3574199808,3574202367,ES
3574202368,3574267903,NL
3574267904,3574333439,FR
3574333440,3574341631,GB
-3574341632,3574398975,EU
+3574341632,3574348287,EU
+3574348288,3574348543,GB
+3574348544,3574398975,EU
3574398976,3574464511,PT
3574464512,3574530047,TR
3574530048,3574594559,SE
@@ -76004,17 +76329,9 @@
3574693888,3574726655,PL
3574726656,3574792191,GB
3574792192,3574824959,CZ
-3574824960,3574825471,GB
-3574825472,3574825983,NL
-3574825984,3574827007,GB
-3574827008,3574827519,NL
-3574827520,3574828031,GB
-3574828032,3574828543,NL
-3574828544,3574830079,GB
+3574824960,3574830079,GB
3574830080,3574831103,NL
-3574831104,3574836735,GB
-3574836736,3574837759,NL
-3574837760,3574857727,GB
+3574831104,3574857727,GB
3574857728,3574923263,DE
3574923264,3574939647,RU
3574939648,3574956031,SE
@@ -76034,9 +76351,7 @@
3575562240,3575578623,DE
3575578624,3575581439,BE
3575581440,3575581695,EU
-3575581696,3575587839,BE
-3575587840,3575588351,GB
-3575588352,3575588863,BE
+3575581696,3575588863,BE
3575588864,3575589119,A2
3575589120,3575589375,BE
3575589376,3575589631,A2
@@ -76067,32 +76382,302 @@
3575873536,3575906303,EE
3575906304,3575971839,FR
3575971840,3576037375,ES
-3576037376,3576040277,EU
-3576040278,3576040278,GB
-3576040279,3576049151,EU
-3576049152,3576049919,GB
-3576049920,3576053759,EU
-3576053760,3576054847,GB
-3576054848,3576055935,EU
+3576037376,3576038207,EU
+3576038208,3576038271,GB
+3576038272,3576038335,EU
+3576038336,3576038463,GB
+3576038464,3576038527,EU
+3576038528,3576038591,GB
+3576038592,3576038911,EU
+3576038912,3576038975,GB
+3576038976,3576039167,EU
+3576039168,3576039231,GB
+3576039232,3576039359,EU
+3576039360,3576039383,GB
+3576039384,3576039391,EU
+3576039392,3576039455,GB
+3576039456,3576039519,EU
+3576039520,3576039551,GB
+3576039552,3576039583,EU
+3576039584,3576039647,GB
+3576039648,3576039807,EU
+3576039808,3576039839,GB
+3576039840,3576039903,EU
+3576039904,3576039935,GB
+3576039936,3576040063,EU
+3576040064,3576040127,GB
+3576040128,3576040215,EU
+3576040216,3576040223,GB
+3576040224,3576040271,EU
+3576040272,3576040287,GB
+3576040288,3576040351,EU
+3576040352,3576040383,GB
+3576040384,3576040831,EU
+3576040832,3576040959,GB
+3576040960,3576041471,EU
+3576041472,3576041535,GB
+3576041536,3576041727,EU
+3576041728,3576041791,GB
+3576041792,3576041831,EU
+3576041832,3576041847,GB
+3576041848,3576041863,EU
+3576041864,3576041871,GB
+3576041872,3576041879,EU
+3576041880,3576041887,GB
+3576041888,3576041903,EU
+3576041904,3576041919,GB
+3576041920,3576041935,EU
+3576041936,3576041943,GB
+3576041944,3576041951,EU
+3576041952,3576041975,GB
+3576041976,3576042111,EU
+3576042112,3576042239,GB
+3576042240,3576042495,EU
+3576042496,3576042623,GB
+3576042624,3576042687,EU
+3576042688,3576042695,GB
+3576042696,3576042751,EU
+3576042752,3576042815,GB
+3576042816,3576045583,EU
+3576045584,3576045599,GB
+3576045600,3576045663,EU
+3576045664,3576045679,GB
+3576045680,3576045711,EU
+3576045712,3576045735,GB
+3576045736,3576045799,EU
+3576045800,3576045807,GB
+3576045808,3576045815,EU
+3576045816,3576045823,GB
+3576045824,3576048639,EU
+3576048640,3576048767,GB
+3576048768,3576048959,EU
+3576048960,3576049023,GB
+3576049024,3576049151,EU
+3576049152,3576050047,GB
+3576050048,3576053759,EU
+3576053760,3576054911,GB
+3576054912,3576055103,EU
+3576055104,3576055111,GB
+3576055112,3576055119,EU
+3576055120,3576055127,GB
+3576055128,3576055151,EU
+3576055152,3576055167,GB
+3576055168,3576055183,EU
+3576055184,3576055199,GB
+3576055200,3576055207,EU
+3576055208,3576055215,GB
+3576055216,3576055279,EU
+3576055280,3576055551,GB
+3576055552,3576055807,EU
+3576055808,3576055871,GB
+3576055872,3576055935,EU
3576055936,3576055999,GB
-3576056000,3576061687,EU
+3576056000,3576056191,EU
+3576056192,3576056255,GB
+3576056256,3576056319,EU
+3576056320,3576056447,GB
+3576056448,3576056703,EU
+3576056704,3576056767,GB
+3576056768,3576056855,EU
+3576056856,3576056871,GB
+3576056872,3576056879,EU
+3576056880,3576056887,GB
+3576056888,3576056919,EU
+3576056920,3576056927,GB
+3576056928,3576056935,EU
+3576056936,3576056943,GB
+3576056944,3576056951,EU
+3576056952,3576056975,GB
+3576056976,3576056991,EU
+3576056992,3576056999,GB
+3576057000,3576057039,EU
+3576057040,3576057055,GB
+3576057056,3576057631,EU
+3576057632,3576057647,GB
+3576057648,3576057711,EU
+3576057712,3576057743,GB
+3576057744,3576057823,EU
+3576057824,3576057839,GB
+3576057840,3576058879,EU
+3576058880,3576059007,GB
+3576059008,3576059647,EU
+3576059648,3576059679,GB
+3576059680,3576059711,EU
+3576059712,3576059743,GB
+3576059744,3576059775,EU
+3576059776,3576059807,GB
+3576059808,3576060287,EU
+3576060288,3576060351,GB
+3576060352,3576061039,EU
+3576061040,3576061055,GB
+3576061056,3576061119,EU
+3576061120,3576061135,GB
+3576061136,3576061183,EU
+3576061184,3576061247,GB
+3576061248,3576061311,EU
+3576061312,3576061439,GB
+3576061440,3576061583,EU
+3576061584,3576061591,GB
+3576061592,3576061619,EU
+3576061620,3576061631,GB
+3576061632,3576061639,EU
+3576061640,3576061647,GB
+3576061648,3576061687,EU
3576061688,3576061695,GB
-3576061696,3576078143,EU
-3576078144,3576078159,GB
-3576078160,3576085695,EU
+3576061696,3576062463,EU
+3576062464,3576062479,GB
+3576062480,3576064319,EU
+3576064320,3576064448,GB
+3576064449,3576064543,EU
+3576064544,3576064559,GB
+3576064560,3576065407,EU
+3576065408,3576065535,GB
+3576065536,3576065855,EU
+3576065856,3576065887,GB
+3576065888,3576066303,EU
+3576066304,3576066431,GB
+3576066432,3576067071,EU
+3576067072,3576067199,GB
+3576067200,3576068351,EU
+3576068352,3576068479,GB
+3576068480,3576068863,EU
+3576068864,3576068927,GB
+3576068928,3576069055,EU
+3576069056,3576069119,GB
+3576069120,3576069247,EU
+3576069248,3576069279,GB
+3576069280,3576069311,EU
+3576069312,3576069343,GB
+3576069344,3576070695,EU
+3576070696,3576070703,GB
+3576070704,3576070711,EU
+3576070712,3576070719,GB
+3576070720,3576070727,EU
+3576070728,3576070735,GB
+3576070736,3576070775,EU
+3576070776,3576070783,GB
+3576070784,3576071295,EU
+3576071296,3576071423,GB
+3576071424,3576071551,EU
+3576071552,3576071679,GB
+3576071680,3576071935,EU
+3576071936,3576071951,GB
+3576071952,3576072063,EU
+3576072064,3576072079,GB
+3576072080,3576072287,EU
+3576072288,3576072319,GB
+3576072320,3576072415,EU
+3576072416,3576072447,GB
+3576072448,3576073215,EU
+3576073216,3576073279,GB
+3576073280,3576074751,EU
+3576074752,3576074879,GB
+3576074880,3576075263,EU
+3576075264,3576075327,GB
+3576075328,3576075647,EU
+3576075648,3576075711,GB
+3576075712,3576075775,EU
+3576075776,3576075903,GB
+3576075904,3576076271,EU
+3576076272,3576076351,GB
+3576076352,3576076567,EU
+3576076568,3576076575,GB
+3576076576,3576076623,EU
+3576076624,3576076631,GB
+3576076632,3576076783,EU
+3576076784,3576076791,GB
+3576076792,3576077439,EU
+3576077440,3576077471,GB
+3576077472,3576077567,EU
+3576077568,3576077695,GB
+3576077696,3576077935,EU
+3576077936,3576077967,GB
+3576077968,3576078143,EU
+3576078144,3576078175,GB
+3576078176,3576078463,EU
+3576078464,3576078591,GB
+3576078592,3576079999,EU
+3576080000,3576080127,GB
+3576080128,3576080223,EU
+3576080224,3576080255,GB
+3576080256,3576080775,EU
+3576080776,3576080783,GB
+3576080784,3576080791,EU
+3576080792,3576080799,GB
+3576080800,3576080807,EU
+3576080808,3576080815,GB
+3576080816,3576080823,EU
+3576080824,3576080831,GB
+3576080832,3576082079,EU
+3576082080,3576082111,GB
+3576082112,3576082191,EU
+3576082192,3576082223,GB
+3576082224,3576082687,EU
+3576082688,3576082943,GB
+3576082944,3576084479,EU
+3576084480,3576084543,GB
+3576084544,3576084607,EU
+3576084608,3576084671,GB
+3576084672,3576084703,EU
+3576084704,3576084735,GB
+3576084736,3576084863,EU
+3576084864,3576084927,GB
+3576084928,3576085183,EU
+3576085184,3576085215,GB
+3576085216,3576085695,EU
3576085696,3576085711,GB
-3576085712,3576089439,EU
+3576085712,3576086015,EU
+3576086016,3576086143,GB
+3576086144,3576086367,EU
+3576086368,3576086431,GB
+3576086432,3576086495,EU
+3576086496,3576086527,GB
+3576086528,3576086567,EU
+3576086568,3576086571,GB
+3576086572,3576086575,EU
+3576086576,3576086591,GB
+3576086592,3576086599,EU
+3576086600,3576086603,GB
+3576086604,3576087807,EU
+3576087808,3576087823,GB
+3576087824,3576087951,EU
+3576087952,3576087967,GB
+3576087968,3576088031,EU
+3576088032,3576088047,GB
+3576088048,3576088223,EU
+3576088224,3576088231,GB
+3576088232,3576088375,EU
+3576088376,3576088383,GB
+3576088384,3576088479,EU
+3576088480,3576088511,GB
+3576088512,3576088959,EU
+3576088960,3576088967,GB
+3576088968,3576089023,EU
+3576089024,3576089039,GB
+3576089040,3576089439,EU
3576089440,3576089471,GB
-3576089472,3576091967,EU
+3576089472,3576089775,EU
+3576089776,3576089791,GB
+3576089792,3576091407,EU
+3576091408,3576091423,GB
+3576091424,3576091455,EU
+3576091456,3576091479,GB
+3576091480,3576091967,EU
3576091968,3576091983,GB
3576091984,3576091999,EU
3576092000,3576092031,GB
-3576092032,3576092129,EU
-3576092130,3576092130,GB
-3576092131,3576095231,EU
+3576092032,3576092127,EU
+3576092128,3576092159,GB
+3576092160,3576092863,EU
+3576092864,3576092895,GB
+3576092896,3576093063,EU
+3576093064,3576093071,GB
+3576093072,3576093183,EU
+3576093184,3576093247,GB
+3576093248,3576095231,EU
3576095232,3576096767,GB
-3576096768,3576099327,EU
-3576099328,3576100863,GB
+3576096768,3576099071,EU
+3576099072,3576100863,GB
3576100864,3576101375,EU
3576101376,3576135679,GB
3576135680,3576168447,DE
@@ -76102,7 +76687,9 @@
3576238336,3576238847,FR
3576238848,3576241151,GB
3576241152,3576241407,FR
-3576241408,3576242175,GB
+3576241408,3576241991,GB
+3576241992,3576241999,FR
+3576242000,3576242175,GB
3576242176,3576242431,FR
3576242432,3576243199,GB
3576243200,3576243455,FR
@@ -76112,7 +76699,9 @@
3576249344,3576249599,FR
3576249600,3576252159,GB
3576252160,3576252671,FR
-3576252672,3576254463,GB
+3576252672,3576253807,GB
+3576253808,3576253815,FR
+3576253816,3576254463,GB
3576254464,3576254719,FR
3576254720,3576254975,GB
3576254976,3576255231,FR
@@ -76132,7 +76721,9 @@
3576262133,3576262133,FR
3576262134,3576263423,GB
3576263424,3576263679,FR
-3576263680,3576264447,GB
+3576263680,3576263919,GB
+3576263920,3576263935,FR
+3576263936,3576264447,GB
3576264448,3576264703,FR
3576264704,3576265215,GB
3576265216,3576265471,FR
@@ -76151,9 +76742,7 @@
3576823808,3576889343,SE
3576889344,3576954879,NL
3576954880,3576987647,NO
-3576987648,3577001983,GB
-3577001984,3577002495,NL
-3577002496,3577020415,GB
+3576987648,3577020415,GB
3577020416,3577085951,NL
3577085952,3577151487,DE
3577151488,3577153023,RE
@@ -76188,17 +76777,13 @@
3577544704,3577545983,DE
3577545984,3577546111,SE
3577546112,3577610239,DE
-3577610240,3577611775,EU
-3577611776,3577612287,DE
-3577612288,3577618943,EU
-3577618944,3577619455,GB
-3577619456,3577625599,EU
+3577610240,3577625599,EU
3577625600,3577625855,GB
3577625856,3577626111,EU
3577626112,3577626367,GB
3577626368,3577628671,EU
-3577628672,3577630207,CH
-3577630208,3577632511,EU
+3577628672,3577629695,CH
+3577629696,3577632511,EU
3577632512,3577632767,GB
3577632768,3577635839,EU
3577635840,3577636863,DE
@@ -76212,12 +76797,10 @@
3577642240,3577653247,EU
3577653248,3577655295,IT
3577655296,3577663487,EU
-3577663488,3577665023,SE
-3577665024,3577669631,EU
+3577663488,3577664511,SE
+3577664512,3577669631,EU
3577669632,3577670655,BE
-3577670656,3577671167,EU
-3577671168,3577671679,BE
-3577671680,3577675775,EU
+3577670656,3577675775,EU
3577675776,3577741311,PT
3577741312,3578003455,SE
3578003456,3578040319,DE
@@ -76263,9 +76846,7 @@
3579248640,3579346943,RU
3579346944,3579361535,SE
3579361536,3579361791,NO
-3579361792,3579362815,SE
-3579362816,3579363327,NO
-3579363328,3579445247,SE
+3579361792,3579445247,SE
3579445248,3579478015,AT
3579478016,3579527167,FR
3579527168,3579543551,BA
@@ -76282,58 +76863,42 @@
3579740160,3579772927,IE
3579772928,3579838463,DE
3579838464,3580100607,ES
-3580100608,3580103167,SE
-3580103168,3580103679,LV
-3580103680,3580104703,SE
+3580100608,3580104703,SE
3580104704,3580106751,LV
-3580106752,3580107263,SE
-3580107264,3580107775,LV
-3580107776,3580112895,SE
+3580106752,3580112895,SE
3580112896,3580116991,LV
-3580116992,3580133375,SE
-3580133376,3580133887,LV
-3580133888,3580135423,SE
-3580135424,3580135531,EE
-3580135532,3580135532,SE
-3580135533,3580135935,EE
-3580135936,3580137983,SE
-3580137984,3580139007,HR
-3580139008,3580150783,SE
+3580116992,3580137727,SE
+3580137728,3580137983,HR
+3580137984,3580150783,SE
3580150784,3580151039,NL
3580151040,3580162047,SE
3580162048,3580164095,EE
3580164096,3580165887,SE
3580165888,3580166143,NL
-3580166144,3580198911,SE
-3580198912,3580199423,LV
-3580199424,3580200959,EE
-3580200960,3580203007,LT
-3580203008,3580203135,HR
-3580203136,3580203519,SE
+3580166144,3580201983,SE
+3580201984,3580203007,LT
+3580203008,3580203519,SE
3580203520,3580204543,RU
3580204544,3580205055,NL
-3580205056,3580207103,HR
+3580205056,3580206079,SE
+3580206080,3580207103,HR
3580207104,3580208127,LV
-3580208128,3580209151,EE
+3580208128,3580208639,SE
+3580208640,3580209151,EE
3580209152,3580213247,HR
-3580213248,3580214783,LV
-3580214784,3580215295,HR
-3580215296,3580216831,EE
-3580216832,3580220415,SE
-3580220416,3580221439,LV
-3580221440,3580221951,HR
-3580221952,3580222335,SE
-3580222336,3580222719,HR
-3580222720,3580222975,SE
-3580222976,3580223487,HR
+3580213248,3580214271,LV
+3580214272,3580215295,SE
+3580215296,3580216319,EE
+3580216320,3580223487,SE
3580223488,3580231679,DE
3580231680,3580232447,SE
-3580232448,3580233727,LT
-3580233728,3580234751,SE
-3580234752,3580236799,LT
+3580232448,3580233215,LT
+3580233216,3580234751,SE
+3580234752,3580235263,LT
+3580235264,3580235775,SE
+3580235776,3580236799,LT
3580236800,3580237567,LV
-3580237568,3580237823,SE
-3580237824,3580239871,LV
+3580237568,3580239871,SE
3580239872,3580241919,EE
3580241920,3580243967,SE
3580243968,3580244991,EE
@@ -76345,19 +76910,19 @@
3580258304,3580258815,SE
3580258816,3580260351,DE
3580260352,3580265471,AT
-3580265472,3580265983,SE
-3580265984,3580268543,EE
+3580265472,3580266495,SE
+3580266496,3580268543,EE
3580268544,3580272639,LV
3580272640,3580276735,SE
3580276736,3580280831,NL
3580280832,3580329983,RU
3580329984,3580338175,SE
-3580338176,3580339711,HR
-3580339712,3580340223,EE
+3580338176,3580338431,HR
+3580338432,3580338687,SE
+3580338688,3580339711,HR
+3580339712,3580340223,SE
3580340224,3580344319,LT
-3580344320,3580345343,SE
-3580345344,3580345855,EE
-3580345856,3580354559,SE
+3580344320,3580354559,SE
3580354560,3580362751,LT
3580362752,3580624895,GB
3580624896,3580626943,RU
@@ -76410,20 +76975,19 @@
3581158400,3581159423,EU
3581159424,3581161471,IE
3581161472,3581173759,EU
-3581173760,3581196799,NL
-3581196800,3581197823,EU
-3581197824,3581198335,GB
-3581198336,3581199871,NL
-3581199872,3581203967,EU
-3581203968,3581214719,SE
+3581173760,3581196287,NL
+3581196288,3581198335,EU
+3581198336,3581199359,NL
+3581199360,3581204479,EU
+3581204480,3581214719,SE
3581214720,3581231103,NL
3581231104,3581239295,EU
3581239296,3581241343,NL
3581241344,3581242623,EU
3581242624,3581245439,FR
3581245440,3581255679,EU
-3581255680,3581259263,FR
-3581259264,3581280255,EU
+3581255680,3581258751,FR
+3581258752,3581280255,EU
3581280256,3581411327,BE
3581411328,3581673471,GB
3581673472,3581935615,NL
@@ -76541,9 +77105,7 @@
3582697472,3582705663,FI
3582705664,3582722047,TR
3582722048,3582730239,IT
-3582730240,3582736639,ES
-3582736640,3582737151,DZ
-3582737152,3582737279,ES
+3582730240,3582737279,ES
3582737280,3582737407,DZ
3582737408,3582738431,ES
3582738432,3582746623,DK
@@ -76680,8 +77242,8 @@
3583737856,3583743487,EU
3583743488,3583743743,GB
3583743744,3583743999,IE
-3583744000,3583744383,EU
-3583744384,3583744447,GB
+3583744000,3583744319,EU
+3583744320,3583744447,GB
3583744448,3583744959,EU
3583744960,3583744991,GB
3583744992,3583746047,EU
@@ -76698,8 +77260,7 @@
3583827968,3583836159,CH
3583836160,3583844351,DE
3583844352,3583852543,KZ
-3583852544,3583853055,SG
-3583853056,3583854591,FI
+3583852544,3583854591,FI
3583854592,3583854847,GB
3583854848,3583860735,FI
3583860736,3583868927,HU
@@ -76730,13 +77291,9 @@
3584073728,3584081919,SK
3584081920,3584082007,NL
3584082008,3584082015,AT
-3584082016,3584090111,NL
-3584090112,3584090623,NO
-3584090624,3584090879,NL
+3584082016,3584090879,NL
3584090880,3584091135,NO
-3584091136,3584091391,NL
-3584091392,3584091903,NO
-3584091904,3584092415,NL
+3584091136,3584092415,NL
3584092416,3584092671,NO
3584092672,3584092927,NL
3584092928,3584093695,NO
@@ -76775,15 +77332,14 @@
3584247653,3584247956,NL
3584247957,3584247957,NL
3584247958,3584253951,NL
-3584253952,3584254463,ME
-3584254464,3584255743,AL
+3584253952,3584254975,ME
+3584254976,3584255743,AL
3584255744,3584255999,ME
3584256000,3584260095,AL
3584260096,3584260351,ME
3584260352,3584260607,RS
3584260608,3584260863,US
-3584260864,3584261631,ME
-3584261632,3584262143,AL
+3584260864,3584262143,ME
3584262144,3584270335,SE
3584270336,3584278527,FR
3584278528,3584286719,GB
@@ -76800,11 +77356,7 @@
3584376832,3584393215,DE
3584393216,3584401407,GB
3584401408,3584409599,MT
-3584409600,3584413695,RU
-3584413696,3584414207,GB
-3584414208,3584416255,RU
-3584416256,3584416767,GB
-3584416768,3584417791,RU
+3584409600,3584417791,RU
3584417792,3584434175,GB
3584434176,3584442367,LU
3584442368,3584450559,GB
@@ -76840,7 +77392,13 @@
3584663552,3584671743,FR
3584671744,3584688127,NL
3584688128,3584696319,GB
-3584696320,3584704511,ES
+3584696320,3584701751,ES
+3584701752,3584701823,NL
+3584701824,3584701991,ES
+3584701992,3584702007,CH
+3584702008,3584703095,ES
+3584703096,3584703103,BE
+3584703104,3584704511,ES
3584704512,3584720895,RU
3584720896,3584729087,GB
3584729088,3584737279,DE
@@ -76953,7 +77511,7 @@
3585605632,3585613823,PL
3585613824,3585622015,EE
3585622016,3585630207,RU
-3585630208,3585638399,RS
+3585630208,3585638399,IL
3585638400,3585646591,RU
3585646592,3585654783,SA
3585654784,3585662975,NO
@@ -76992,21 +77550,16 @@
3585810432,3585818623,GB
3585818624,3585826815,DE
3585826816,3585835007,RU
-3585835008,3585837055,NL
-3585837056,3585837567,IQ
-3585837568,3585838591,NL
-3585838592,3585839103,NG
-3585839104,3585841663,NL
-3585841664,3585842687,NG
-3585842688,3585843199,NL
+3585835008,3585843199,NL
3585843200,3585851391,NO
3585851392,3585859583,SE
-3585859584,3585860607,RU
+3585859584,3585860607,AF
3585860608,3585863679,DE
3585863680,3585864703,RU
3585864704,3585865471,DE
3585865472,3585865727,LB
-3585865728,3585867775,RU
+3585865728,3585867263,RU
+3585867264,3585867775,DE
3585867776,3585875967,NO
3585875968,3585884159,CH
3585884160,3585892351,IQ
@@ -77056,8 +77609,7 @@
3586162688,3586179071,FI
3586179072,3586195455,ES
3586195456,3586203647,RU
-3586203648,3586204159,ZM
-3586204160,3586205695,KE
+3586203648,3586205695,KE
3586205696,3586207743,BW
3586207744,3586207999,ZA
3586208000,3586208255,A2
@@ -77069,21 +77621,14 @@
3586228224,3586244607,BE
3586244608,3586246655,NL
3586246656,3586248703,BE
-3586248704,3586252799,NL
-3586252800,3586253183,BE
-3586253184,3586258943,NL
-3586258944,3586259455,BE
-3586259456,3586269439,NL
-3586269440,3586270207,GB
-3586270208,3586270719,ES
-3586270720,3586270975,GB
+3586248704,3586260991,NL
+3586260992,3586269183,GB
+3586269184,3586269439,NL
+3586269440,3586270975,GB
3586270976,3586271231,ES
3586271232,3586272255,GB
3586272256,3586272511,NL
-3586272512,3586273279,GB
-3586273280,3586276351,NL
-3586276352,3586276863,GB
-3586276864,3586277375,NL
+3586272512,3586277375,GB
3586277376,3586293759,TR
3586293760,3586310143,ES
3586310144,3586326527,CZ
@@ -77190,7 +77735,9 @@
3587233280,3587233791,NL
3587233792,3587238911,GB
3587238912,3587239423,NL
-3587239424,3587239711,GB
+3587239424,3587239583,GB
+3587239584,3587239599,NL
+3587239600,3587239711,GB
3587239712,3587239727,NL
3587239728,3587239791,GB
3587239792,3587239799,NL
@@ -77217,14 +77764,13 @@
3587375104,3587383295,TR
3587383296,3587391487,CZ
3587391488,3587407871,KZ
-3587407872,3587408895,BE
-3587408896,3587409407,RU
-3587409408,3587412223,BE
+3587407872,3587412223,BE
3587412224,3587413759,NL
3587413760,3587414015,BE
3587414016,3587415039,NL
3587415040,3587422719,BE
-3587422720,3587424255,NL
+3587422720,3587423743,NL
+3587423744,3587424255,BE
3587424256,3587440639,DE
3587440640,3587444900,SE
3587444901,3587444916,FI
@@ -77277,7 +77823,7 @@
3588079616,3588095999,CH
3588096000,3588104191,NL
3588104192,3588112383,BG
-3588112384,3588128767,FR
+3588112384,3588128767,RE
3588128768,3588145151,HU
3588145152,3588153343,PL
3588153344,3588161535,RU
@@ -77308,9 +77854,7 @@
3588571136,3588587519,GB
3588587520,3588588567,ES
3588588568,3588588575,IT
-3588588576,3588595199,ES
-3588595200,3588595455,FR
-3588595456,3588603903,ES
+3588588576,3588603903,ES
3588603904,3588620287,SI
3588620288,3588628479,SA
3588628480,3588636671,CH
@@ -77349,18 +77893,14 @@
3589030144,3589030399,FR
3589030400,3589030911,GB
3589030912,3589031167,NL
-3589031168,3589031935,GB
-3589031936,3589033983,NL
-3589033984,3589034239,GB
+3589031168,3589034239,GB
3589034240,3589034495,EU
-3589034496,3589037055,ES
+3589034496,3589037055,GB
3589037056,3589037311,EU
3589037312,3589037487,NL
3589037488,3589037495,IT
3589037496,3589037567,NL
-3589037568,3589038079,ES
-3589038080,3589040127,NL
-3589040128,3589042175,GB
+3589037568,3589042175,GB
3589042176,3589042431,NL
3589042432,3589043455,GB
3589043456,3589043711,NL
@@ -77400,15 +77940,11 @@
3589554176,3589570559,PS
3589570560,3589580543,GB
3589580544,3589580799,NL
-3589580800,3589581823,GB
-3589581824,3589582335,NL
-3589582336,3589582975,GB
+3589580800,3589582975,GB
3589582976,3589583103,NL
3589583104,3589583871,GB
3589583872,3589584127,NL
-3589584128,3589585407,GB
-3589585408,3589585919,NL
-3589585920,3589586943,GB
+3589584128,3589586943,GB
3589586944,3589603327,RS
3589603328,3589668863,FR
3589668864,3589677055,RU
@@ -77433,10 +77969,8 @@
3589828608,3589828735,EU
3589828736,3589828863,NL
3589828864,3589829631,EU
-3589829632,3589830655,GB
-3589830656,3589831167,DE
-3589831168,3589831679,US
-3589831680,3589832703,EU
+3589829632,3589830143,GB
+3589830144,3589832703,EU
3589832704,3589849087,TR
3589849088,3589865471,GB
3589865472,3589881855,GR
@@ -77472,17 +78006,13 @@
3590244352,3590244607,DE
3590244608,3590245311,FR
3590245312,3590245439,US
-3590245440,3590246399,FR
-3590246400,3590246911,US
-3590246912,3590247167,FR
+3590245440,3590247167,FR
3590247168,3590247231,US
3590247232,3590247295,FR
3590247296,3590247423,US
3590247424,3590247487,FR
3590247488,3590247551,US
-3590247552,3590248447,FR
-3590248448,3590248959,US
-3590248960,3590250239,FR
+3590247552,3590250239,FR
3590250240,3590250495,GR
3590250496,3590250751,IE
3590250752,3590251647,FR
@@ -77500,11 +78030,9 @@
3590255936,3590256127,FR
3590256128,3590256383,ES
3590256384,3590256735,FR
-3590256736,3590256751,BE
-3590256752,3590256767,FR
+3590256736,3590256767,BE
3590256768,3590257151,US
-3590257152,3590258175,DE
-3590258176,3590258559,FR
+3590257152,3590258559,FR
3590258560,3590258687,US
3590258688,3590291455,IT
3590291456,3590299647,EG
@@ -77527,13 +78055,10 @@
3590316480,3590316543,US
3590316544,3590322175,GB
3590322176,3590322431,A2
-3590322432,3590322687,GB
-3590322688,3590323199,IQ
-3590323200,3590323711,MW
-3590323712,3590324223,GB
-3590324224,3623891967,US
-3623891968,3623892479,ZA
-3623892480,3624054783,US
+3590322432,3590324223,GB
+3590324224,3623906047,US
+3623906048,3623906303,US
+3623906304,3624054783,US
3624054784,3624056831,ZA
3624056832,3624181759,US
3624181760,3624182783,ZA
@@ -77542,8 +78067,7 @@
3624208384,3624255487,US
3624255488,3624257535,ZA
3624257536,3624271871,US
-3624271872,3624272383,SY
-3624272384,3624283135,CA
+3624271872,3624283135,CA
3624283136,3624284159,US
3624284160,3624286193,CA
3624286194,3624286194,ZA
@@ -77606,11 +78130,7 @@
3625172992,3625287679,US
3625287680,3625295871,CA
3625295872,3625418751,US
-3625418752,3625420031,CA
-3625420032,3625420543,US
-3625420544,3625422591,CA
-3625422592,3625423103,US
-3625423104,3625426943,CA
+3625418752,3625426943,CA
3625426944,3625508863,US
3625508864,3625512959,CA
3625512960,3625574399,US
@@ -77623,9 +78143,7 @@
3625959424,3625961471,GB
3625961472,3625961983,US
3625961984,3625962239,GB
-3625962240,3626091519,US
-3626091520,3626092031,AR
-3626092032,3626222653,US
+3625962240,3626222653,US
3626222654,3626222654,CA
3626222655,3626270719,US
3626270720,3626287103,CA
@@ -77677,17 +78195,9 @@
3628603392,3628604415,US
3628604416,3628605439,GT
3628605440,3628608511,IL
-3628608512,3628609023,VE
-3628609024,3628613631,US
+3628608512,3628613631,US
3628613632,3628614399,ID
-3628614400,3628614911,CO
-3628614912,3628615167,US
-3628615168,3628615679,IL
-3628615680,3628616191,US
-3628616192,3628617215,PR
-3628617216,3628617727,US
-3628617728,3628618239,CO
-3628618240,3628618751,US
+3628614400,3628618751,US
3628618752,3628619775,HN
3628619776,3628622847,US
3628622848,3628623871,PR
@@ -77700,18 +78210,11 @@
3628629760,3628631807,VE
3628631808,3628634111,US
3628634112,3628636159,AR
-3628636160,3628636671,VE
-3628636672,3628637183,US
-3628637184,3628637695,CO
-3628637696,3628638207,US
+3628636160,3628638207,US
3628638208,3628646399,CL
-3628646400,3628646911,US
-3628646912,3628647423,HN
-3628647424,3628647679,US
+3628646400,3628647679,US
3628647680,3628649727,CO
-3628649728,3628654079,US
-3628654080,3628654591,PA
-3628654592,3628655359,US
+3628649728,3628655359,US
3628655360,3628657407,CO
3628657408,3628679167,US
3628679168,3628683263,CA
@@ -77739,9 +78242,7 @@
3630040432,3630040447,CA
3630040448,3630041343,US
3630041344,3630041599,CA
-3630041600,3630046719,US
-3630046720,3630047231,CA
-3630047232,3630049279,US
+3630041600,3630049279,US
3630049280,3630049535,CA
3630049536,3630050047,US
3630050048,3630050303,CA
@@ -77761,7 +78262,9 @@
3630074112,3630074255,CA
3630074256,3630074287,US
3630074288,3630074367,CA
-3630074368,3630081151,US
+3630074368,3630080575,US
+3630080576,3630080639,CA
+3630080640,3630081151,US
3630081152,3630081279,CA
3630081280,3630086375,US
3630086376,3630086383,CA
@@ -77777,14 +78280,14 @@
3630120960,3630129151,CA
3630129152,3630141695,US
3630141696,3630141951,CA
-3630141952,3630146047,US
-3630146048,3630146559,CA
-3630146560,3630147839,US
+3630141952,3630147839,US
3630147840,3630148095,CA
3630148096,3630152959,US
3630152960,3630153215,CA
3630153216,3630157311,US
-3630157312,3630158135,CA
+3630157312,3630157567,CA
+3630157568,3630158079,US
+3630158080,3630158135,CA
3630158136,3630158151,US
3630158152,3630158335,CA
3630158336,3630161407,US
@@ -77797,8 +78300,8 @@
3630168320,3630169087,CA
3630169088,3630309375,US
3630309376,3630317567,CA
-3630317568,3630375423,US
-3630375424,3630383103,CA
+3630317568,3630375167,US
+3630375168,3630383103,CA
3630383104,3630391295,US
3630391296,3630395391,CA
3630395392,3630718975,US
@@ -77807,9 +78310,7 @@
3630745856,3630746111,UG
3630746112,3630746367,US
3630746368,3630746623,UG
-3630746624,3630746879,US
-3630746880,3630747391,TZ
-3630747392,3630780415,US
+3630746624,3630780415,US
3630780416,3630784511,CA
3630784512,3630850047,US
3630850048,3630854143,CA
@@ -77822,15 +78323,13 @@
3631096953,3631112191,US
3631112192,3631112703,VC
3631112704,3631116543,BB
-3631116544,3631117055,GD
-3631117056,3631117439,BB
-3631117440,3631117567,GD
+3631116544,3631117567,GD
3631117568,3631117823,BB
3631117824,3631118079,GD
3631118080,3631118335,BB
3631118336,3631119103,VC
-3631119104,3631120127,BB
-3631120128,3631120383,GD
+3631119104,3631119615,BB
+3631119616,3631120383,GD
3631120384,3631144959,US
3631144960,3631153151,CA
3631153152,3631284223,US
@@ -77887,10 +78386,7 @@
3632971776,3632988159,CA
3632988160,3632994047,US
3632994048,3632994303,US
-3632994304,3633029119,US
-3633029120,3633029631,PY
-3633029632,3633030143,NI
-3633030144,3633031679,US
+3632994304,3633031679,US
3633031680,3633031935,A2
3633031936,3633032191,PG
3633032192,3633036287,US
@@ -77907,18 +78403,11 @@
3633456384,3633456639,AU
3633456640,3633479679,US
3633479680,3633483775,CA
-3633483776,3633545215,US
-3633545216,3633545727,GA
-3633545728,3633547263,US
-3633547264,3633547775,GA
+3633483776,3633547775,US
3633547776,3633548287,NG
3633548288,3633548799,US
3633548800,3633548927,A2
-3633548928,3633549055,US
-3633549056,3633549567,A2
-3633549568,3633550847,US
-3633550848,3633551359,GA
-3633551360,3633552127,US
+3633548928,3633552127,US
3633552128,3633552383,A2
3633552384,3633757439,US
3633757440,3633757695,IN
@@ -77936,9 +78425,7 @@
3633889280,3633893375,CA
3633893376,3633971199,US
3633971200,3634020351,CA
-3634020352,3634037247,US
-3634037248,3634037759,CA
-3634037760,3634053119,US
+3634020352,3634053119,US
3634053120,3634061311,CL
3634061312,3634094079,US
3634094080,3634098175,SE
@@ -77978,26 +78465,15 @@
3635466240,3635470335,CA
3635470336,3635643391,US
3635643392,3635644415,JP
-3635644416,3635645439,US
-3635645440,3635645951,HK
-3635645952,3635646463,TL
-3635646464,3635646975,US
-3635646976,3635647487,GB
-3635647488,3635650559,US
+3635644416,3635650559,US
3635650560,3635652607,HK
3635652608,3635654655,US
-3635654656,3635656191,HK
-3635656192,3635656703,US
+3635654656,3635655679,HK
+3635655680,3635656703,US
3635656704,3635657727,JP
-3635657728,3635659263,US
-3635659264,3635660287,ID
-3635660288,3635660799,US
+3635657728,3635660799,US
3635660800,3635662847,HK
-3635662848,3635670527,US
-3635670528,3635671039,TL
-3635671040,3635674623,US
-3635674624,3635675135,HK
-3635675136,3635871743,US
+3635662848,3635871743,US
3635871744,3635879935,CA
3635879936,3635892223,US
3635892224,3635895785,CA
@@ -78026,9 +78502,9 @@
3636158064,3636158071,CA
3636158072,3636158207,US
3636158208,3636158215,CA
-3636158216,3636162047,US
-3636162048,3636162559,CA
-3636162560,3636166399,US
+3636158216,3636158549,US
+3636158550,3636158550,CA
+3636158551,3636166399,US
3636166400,3636166655,CA
3636166656,3636396031,US
3636396032,3636461567,CA
@@ -78036,15 +78512,11 @@
3636609024,3636621311,CA
3636621312,3636625407,US
3636625408,3636626431,AR
-3636626432,3636626943,BR
-3636626944,3636627455,US
+3636626432,3636627455,US
3636627456,3636628479,MX
-3636628480,3636628991,PE
-3636628992,3636822015,US
+3636628480,3636822015,US
3636822016,3636854783,CA
-3636854784,3636862975,US
-3636862976,3636867071,CA
-3636867072,3636887551,US
+3636854784,3636887551,US
3636887552,3636895743,CA
3636895744,3636906143,US
3636906144,3636906175,BE
@@ -78073,15 +78545,19 @@
3638350080,3638370303,US
3638370304,3638386687,CA
3638386688,3638401087,US
-3638401088,3638401279,CA
+3638401088,3638401119,CA
+3638401120,3638401151,US
+3638401152,3638401279,CA
3638401280,3638509567,US
3638509568,3638534143,CA
3638534144,3638697983,US
3638697984,3638706175,CA
-3638706176,3638706687,A2
+3638706176,3638706687,US
3638706688,3638706943,NG
-3638706944,3638710271,A2
-3638710272,3638874111,US
+3638706944,3638707455,A2
+3638707456,3638707711,US
+3638707712,3638710015,A2
+3638710016,3638874111,US
3638874112,3638878207,CA
3638878208,3638880511,US
3638880512,3638880767,CA
@@ -78100,16 +78576,11 @@
3639283712,3639369727,US
3639369728,3639372031,A2
3639372032,3639372287,US
-3639372288,3639375359,A2
-3639375360,3639375871,US
-3639375872,3639376895,A2
-3639376896,3639377407,GU
-3639377408,3639390207,US
+3639372288,3639377663,A2
+3639377664,3639390207,US
3639390208,3639394303,ZA
3639394304,3639395839,US
-3639395840,3639397887,A2
-3639397888,3639398399,US
-3639398400,3639398911,A2
+3639395840,3639398911,A2
3639398912,3639399679,US
3639399680,3639399935,HN
3639399936,3639400447,A2
@@ -78172,9 +78643,7 @@
3640312832,3640313087,TO
3640313088,3640316927,US
3640316928,3640317183,MX
-3640317184,3640318207,US
-3640318208,3640318719,NC
-3640318720,3640348671,US
+3640317184,3640348671,US
3640348672,3640350719,MX
3640350720,3640360959,US
3640360960,3640369151,CA
@@ -78222,8 +78691,8 @@
3641115272,3641115279,US
3641115280,3641132351,DE
3641132352,3641132415,IT
-3641132416,3641150975,DE
-3641150976,3641151232,CN
+3641132416,3641151231,DE
+3641151232,3641151232,CN
3641151233,3641180159,DE
3641180160,3641188351,GB
3641188352,3641192447,TJ
@@ -78284,11 +78753,7 @@
3641475072,3641479167,IT
3641479168,3641483263,GB
3641483264,3641491455,IT
-3641491456,3641493503,UA
-3641493504,3641494015,RU
-3641494016,3641495551,UA
-3641495552,3641496063,RU
-3641496064,3641499647,UA
+3641491456,3641499647,UA
3641499648,3641503743,SA
3641503744,3641507839,RU
3641507840,3641516031,NO
@@ -78327,8 +78792,8 @@
3641659392,3641663487,FR
3641663488,3641667583,MT
3641667584,3641669119,GB
-3641669120,3641670655,ZW
-3641670656,3641671167,GB
+3641669120,3641670271,ZW
+3641670272,3641671167,GB
3641671168,3641671423,ZW
3641671424,3641671679,GB
3641671680,3641679871,RU
@@ -78360,7 +78825,9 @@
3641774080,3641778175,DE
3641778176,3641782271,PL
3641782272,3641782783,BG
-3641782784,3641784575,GB
+3641782784,3641783039,GB
+3641783040,3641784063,BG
+3641784064,3641784575,GB
3641784576,3641786367,BG
3641786368,3641790463,SE
3641790464,3641794559,LT
@@ -78519,9 +78986,7 @@
3642429440,3642433535,GB
3642433536,3642435583,CY
3642435584,3642436607,RU
-3642436608,3642437119,CY
-3642437120,3642437631,GB
-3642437632,3642441727,CY
+3642436608,3642441727,CY
3642441728,3642449919,IT
3642449920,3642454015,CH
3642454016,3642458111,IT
@@ -78549,7 +79014,9 @@
3642535936,3642540031,IS
3642540032,3642544127,SE
3642544128,3642552319,RU
-3642552320,3642556415,UA
+3642552320,3642554198,UA
+3642554199,3642554199,RU
+3642554200,3642556415,UA
3642556416,3642560511,CZ
3642560512,3642561279,US
3642561280,3642561535,KG
@@ -78625,7 +79092,9 @@
3644911616,3644915711,BE
3644915712,3644919807,RU
3644919808,3644923903,DE
-3644923904,3644927999,IL
+3644923904,3644924927,IL
+3644924928,3644925183,US
+3644925184,3644927999,IL
3644928000,3644932095,GI
3644932096,3644936191,IT
3644936192,3644940287,RU
@@ -78637,9 +79106,7 @@
3644968960,3644973055,RU
3644973056,3644977151,NO
3644977152,3644981247,UA
-3644981248,3644983807,BE
-3644983808,3644984319,NL
-3644984320,3644985343,BE
+3644981248,3644985343,BE
3644985344,3644989439,RU
3644989440,3644997631,DE
3644997632,3645005823,RU
@@ -78675,7 +79142,9 @@
3645136896,3645145087,NO
3645145088,3645149183,GB
3645149184,3645161471,DE
-3645161472,3645165567,AT
+3645161472,3645163519,AT
+3645163520,3645164031,GB
+3645164032,3645165567,AT
3645165568,3645169663,TR
3645169664,3645173759,CH
3645173760,3645177855,GB
@@ -78797,17 +79266,11 @@
3645657088,3645661183,SE
3645661184,3645665279,DE
3645665280,3645669375,PL
-3645669376,3645669887,PT
-3645669888,3645670399,ES
-3645670400,3645670911,FR
+3645669376,3645670911,PT
3645670912,3645673471,ES
3645673472,3645673535,PT
3645673536,3645674239,ES
-3645674240,3645674495,PT
-3645674496,3645675007,ES
-3645675008,3645676031,PT
-3645676032,3645676543,ES
-3645676544,3645676799,PT
+3645674240,3645676799,PT
3645676800,3645677567,ES
3645677568,3645681663,AT
3645681664,3645685759,RU
@@ -78896,8 +79359,7 @@
3647966208,3647967231,GB
3647967232,3647968255,BE
3647968256,3647969279,FR
-3647969280,3647969791,IT
-3647969792,3647970047,DE
+3647969280,3647970047,DE
3647970048,3647970303,BE
3647970304,3647971327,DE
3647971328,3647972351,GB
@@ -78915,33 +79377,25 @@
3647980544,3647981567,GB
3647981568,3647982591,BE
3647982592,3647983615,IT
-3647983616,3647984127,DE
+3647983616,3647984031,DE
+3647984032,3647984047,NL
+3647984048,3647984127,DE
3647984128,3647984383,NL
-3647984384,3647984639,DE
-3647984640,3647985151,DK
-3647985152,3647985663,BE
-3647985664,3647986431,ES
-3647986432,3647986687,FR
+3647984384,3647985663,DE
+3647985664,3647986687,ES
3647986688,3647986943,DE
3647986944,3647987199,ES
3647987200,3647987455,DE
3647987456,3647987711,ES
3647987712,3647988735,IT
3647988736,3647989759,BE
-3647989760,3647990783,DE
-3647990784,3647991807,ES
-3647991808,3647992831,DE
-3647992832,3647993343,BE
-3647993344,3647993855,DE
-3647993856,3647994367,BE
-3647994368,3647994879,NR
-3647994880,3647995903,BE
+3647989760,3647993087,DE
+3647993088,3647993343,BE
+3647993344,3647995519,DE
+3647995520,3647995583,BE
+3647995584,3647995903,DE
3647995904,3648004095,RU
-3648004096,3648005119,GB
-3648005120,3648006143,RU
-3648006144,3648006655,GB
-3648006656,3648007167,RU
-3648007168,3648008191,GB
+3648004096,3648008191,GB
3648008192,3648016383,FR
3648016384,3648020479,GB
3648020480,3648024575,IT
@@ -78972,9 +79426,7 @@
3648080544,3648080639,BE
3648080640,3648080895,GA
3648080896,3648081151,ZM
-3648081152,3648081407,BE
-3648081408,3648081919,MW
-3648081920,3648082239,BE
+3648081152,3648082239,BE
3648082240,3648082311,NE
3648082312,3648084223,BE
3648084224,3648084479,CD
@@ -78992,9 +79444,7 @@
3648126976,3648139263,RU
3648139264,3648143359,GB
3648143360,3648147455,DE
-3648147456,3648149503,SE
-3648149504,3648150015,GB
-3648150016,3648151551,SE
+3648147456,3648151551,SE
3648151552,3648155647,NL
3648155648,3648159743,CH
3648159744,3648163839,ES
@@ -79057,9 +79507,7 @@
3648413696,3648417791,SK
3648417792,3648425983,GB
3648425984,3648430079,IT
-3648430080,3648432639,NL
-3648432640,3648433151,DE
-3648433152,3648434175,NL
+3648430080,3648434175,NL
3648434176,3648438271,RU
3648438272,3648442367,CH
3648442368,3648446463,SE
@@ -79079,8 +79527,8 @@
3648499712,3648503807,FR
3648503808,3648511999,DE
3648512000,3648516095,NL
-3648516096,3648518143,RS
-3648518144,3648520191,MK
+3648516096,3648519167,RS
+3648519168,3648520191,MK
3648520192,3648782335,NL
3648782336,3649044479,ES
3649044480,3649110015,FR
@@ -79089,21 +79537,21 @@
3649241088,3649306623,TR
3649306624,3649372159,IL
3649372160,3649437695,IT
-3649437696,3649568767,GB
+3649437696,3649512191,GB
+3649512192,3649512447,FR
+3649512448,3649568767,GB
3649568768,3649634303,BE
3649634304,3649765375,GB
3649765376,3649830911,EG
3649830912,3649831167,NL
3649831168,3649831423,EU
3649831424,3649835007,NL
-3649835008,3649838079,ES
-3649838080,3649839103,NL
+3649835008,3649837055,ES
+3649837056,3649839103,NL
3649839104,3649840127,GB
-3649840128,3649840639,NL
-3649840640,3649843199,GB
-3649843200,3649845247,NL
-3649845248,3649845759,GB
-3649845760,3649847817,NL
+3649840128,3649841151,NL
+3649841152,3649843199,GB
+3649843200,3649847817,NL
3649847818,3649855487,DE
3649855488,3649856511,GB
3649856512,3649857535,US
@@ -79238,7 +79686,8 @@
3650519040,3650523135,HU
3650523136,3650527231,DE
3650527232,3650534911,SE
-3650534912,3650535423,NL
+3650534912,3650535167,NL
+3650535168,3650535423,SE
3650535424,3650539519,RU
3650539520,3650543615,ES
3650543616,3650548109,CH
@@ -79262,12 +79711,9 @@
3650600960,3650605055,SE
3650605056,3650609180,DE
3650609181,3650609181,LB
-3650609182,3650610175,DE
-3650610176,3650610687,KZ
-3650610688,3650611711,DE
+3650609182,3650611711,DE
3650611712,3650611967,LB
-3650611968,3650612735,KZ
-3650612736,3650617343,DE
+3650611968,3650617343,DE
3650617344,3650682879,FI
3650682880,3650748415,PL
3650748416,3650879487,GB
@@ -79281,7 +79727,10 @@
3650922496,3650922751,US
3650922752,3650926591,GB
3650926592,3650929663,ES
-3650929664,3650930431,GB
+3650929664,3650929847,GB
+3650929848,3650929855,FR
+3650929856,3650929863,DE
+3650929864,3650930431,GB
3650930432,3650930687,DE
3650930688,3650939599,GB
3650939600,3650939607,FR
@@ -79289,33 +79738,61 @@
3650944512,3650945023,FR
3650945024,3651010559,DK
3651010560,3651076095,GB
-3651076096,3651079423,DE
-3651079424,3651079807,GB
-3651079808,3651081215,DE
-3651081216,3651081727,GB
-3651081728,3651084031,DE
-3651084032,3651084543,FR
-3651084544,3651108863,DE
+3651076096,3651108863,DE
3651108864,3651141631,EE
-3651141632,3651148287,DE
-3651148288,3651148799,ES
-3651148800,3651200511,DE
-3651200512,3651201023,PL
-3651201024,3651205631,DE
-3651205632,3651206143,ES
-3651206144,3651206655,DE
-3651206656,3651207167,ES
-3651207168,3651207679,EU
-3651207680,3651208703,GB
-3651208704,3651209727,EU
-3651209728,3651210751,GB
-3651210752,3651219455,EU
+3651141632,3651207167,DE
+3651207168,3651207199,GB
+3651207200,3651207223,EU
+3651207224,3651207295,GB
+3651207296,3651207423,EU
+3651207424,3651207615,GB
+3651207616,3651207647,EU
+3651207648,3651208959,GB
+3651208960,3651209215,EU
+3651209216,3651209231,US
+3651209232,3651209239,GB
+3651209240,3651209243,DE
+3651209244,3651209471,EU
+3651209472,3651210751,GB
+3651210752,3651211263,EU
+3651211264,3651211775,IR
+3651211776,3651213823,EU
+3651213824,3651214207,US
+3651214208,3651215359,EU
+3651215360,3651215395,GB
+3651215396,3651215615,EU
+3651215616,3651215871,GB
+3651215872,3651217407,EU
+3651217408,3651217535,GI
+3651217536,3651219455,EU
3651219456,3651219967,US
-3651219968,3651221503,EU
+3651219968,3651220383,EU
+3651220384,3651220415,GB
+3651220416,3651220431,EU
+3651220432,3651220479,GB
+3651220480,3651221503,EU
3651221504,3651221695,GB
-3651221696,3651230719,EU
+3651221696,3651223551,EU
+3651223552,3651223567,GB
+3651223568,3651223583,EU
+3651223584,3651223607,GB
+3651223608,3651223647,EU
+3651223648,3651223663,ES
+3651223664,3651227135,EU
+3651227136,3651227391,GB
+3651227392,3651230719,EU
3651230720,3651231743,MU
-3651231744,3651239935,EU
+3651231744,3651232255,EU
+3651232256,3651232287,GB
+3651232288,3651232319,EU
+3651232320,3651232383,GB
+3651232384,3651232447,EU
+3651232448,3651232511,GB
+3651232512,3651233791,EU
+3651233792,3651233855,GB
+3651233856,3651237375,EU
+3651237376,3651237631,SC
+3651237632,3651239935,EU
3651239936,3651272703,GB
3651272704,3651338239,CH
3651338240,3651350783,GB
@@ -79378,9 +79855,7 @@
3651908608,3651908863,US
3651908864,3651909046,DE
3651909047,3651909047,IQ
-3651909048,3651909631,DE
-3651909632,3651910143,IQ
-3651910144,3651911679,DE
+3651909048,3651911679,DE
3651911680,3651915775,NO
3651915776,3651919871,IS
3651919872,3651921919,NL
@@ -79395,15 +79870,17 @@
3651936768,3651937023,DE
3651937024,3651938047,FR
3651938048,3651939071,DE
-3651939072,3651941119,FR
-3651941120,3651942911,DE
-3651942912,3651944447,FR
+3651939072,3651939839,FR
+3651939840,3651940351,DE
+3651940352,3651941119,FR
+3651941120,3651943423,DE
+3651943424,3651944447,FR
3651944448,3651948543,ES
3651948544,3651952639,FO
3651952640,3651953663,IR
3651953664,3651954687,AE
-3651954688,3651958271,IR
-3651958272,3651960831,AE
+3651954688,3651957759,IR
+3651957760,3651960831,AE
3651960832,3651964927,GB
3651964928,3651969023,SK
3651969024,3651977215,DE
@@ -79471,9 +79948,7 @@
3653386240,3653390335,DE
3653390336,3653394431,FR
3653394432,3653402623,NL
-3653402624,3653403135,GB
-3653403136,3653403647,CD
-3653403648,3653407487,GB
+3653402624,3653407487,GB
3653407488,3653407743,US
3653407744,3653407999,GB
3653408000,3653408255,US
@@ -79495,8 +79970,7 @@
3653431296,3653435391,RU
3653435392,3653439487,DE
3653439488,3653443583,FR
-3653443584,3653447167,DE
-3653447168,3653447679,NL
+3653443584,3653447679,DE
3653447680,3653451775,LV
3653451776,3653464063,RU
3653464064,3653468159,NL
@@ -79546,7 +80020,9 @@
3653656576,3653660671,GB
3653660672,3653664767,CZ
3653664768,3653665791,NL
-3653665792,3653668863,DE
+3653665792,3653666815,DE
+3653666816,3653667839,NL
+3653667840,3653668863,DE
3653668864,3653672959,SE
3653672960,3653681151,RU
3653681152,3653685247,ES
@@ -79571,15 +80047,11 @@
3654608405,3654608405,NO
3654608406,3654608895,SE
3654608896,3654609919,NO
-3654609920,3654613503,SE
-3654613504,3654614015,NO
-3654614016,3654811647,SE
+3654609920,3654811647,SE
3654811648,3654942719,ES
3654942720,3655073791,IR
3655073792,3655335935,IT
-3655335936,3656635647,DE
-3656635648,3656635903,GB
-3656635904,3657433087,DE
+3655335936,3657433087,DE
3657433088,3659530239,CN
3659530240,3659595775,TW
3659595776,3659628543,ID
@@ -79605,8 +80077,8 @@
3663992064,3663992319,NZ
3663992320,3663992575,MY
3663992576,3663993599,NZ
-3663993600,3663996159,ID
-3663996160,3663996415,AU
+3663993600,3663995903,ID
+3663995904,3663996415,AU
3663996416,3663996671,TH
3663996672,3663997183,AU
3663997184,3663997439,ID
diff --git a/src/config/geoip-manual b/src/config/geoip-manual
index 1b392517f..ee217fc9b 100644
--- a/src/config/geoip-manual
+++ b/src/config/geoip-manual
@@ -69,11 +69,6 @@
# US. -KL 2012-11-27
"70.232.245.60","70.232.245.255","1189672252","1189672447","US","United States"
-# SE, because previous MaxMind entry 80.67.11.200-80.67.13.255 is SE, and
-# RIR delegation files say entire range 80.67.0.0-80.67.15.255 is SE.
-# -KL 2013-03-07
-"80.67.14.0","80.67.15.255","1346571776","1346572287","SE","Sweden"
-
# NL, because previous MaxMind entry 81.171.56.0-81.171.80.255 is NL, and
# RIR delegation files say entire range 81.171.64.0-81.171.127.255 is NL.
# -KL 2013-03-07
@@ -100,6 +95,10 @@
# -KL 2012-11-27
"91.238.214.0","91.238.215.255","1542379008","1542379519","GB","United Kingdom"
+# US, because ARIN says US for 198.159.0.0-198.159.255.255 and because
+# previous MaxMind entry is US, too. -KL 2013-08-12
+"98.159.239.0","98.159.239.255","1654648576","1654648831","US","United States"
+
# NL, because next MaxMind entry 176.56.173.0-176.56.173.63 is NL, and RIR
# delegation files say 176.56.160.0-176.56.191.255 is NL. -KL 2013-05-13
"176.56.172.0","176.56.172.255","2956504064","2956504319","NL","Netherlands"
@@ -124,6 +123,10 @@
# delegation files, too. -KL 2013-05-13
"185.25.84.0","185.25.87.255","3105444864","3105445887","GB","United Kingdom"
+# US, because ARIN says US for 192.238.16.0-192.238.23.255 and because
+# next MaxMind entry is US, too. -KL 2013-08-12
+"192.238.16.0","192.238.19.255","3236827136","3236828159","US","United States"
+
# EU, despite neither previous (RU) nor next (UA) MaxMind entry being EU,
# but because RIR delegation files agree with both previous and next
# MaxMind entry and say EU for 193.200.150.0-193.200.150.255.
@@ -140,10 +143,10 @@
# 199.101.192.0-199.101.199.255 which is US. -KL 2013-05-13
"199.101.192.0","199.101.192.255","3345334272","3345334527","US","United States"
-# US, because next MaxMind entry 204.12.162.0-204.12.197.119 is US, and
-# RIR delegation files say 204.12.160.0-204.12.191.255 is US.
-# -KL 2013-05-13
-"204.12.160.0","204.12.161.255","3423379456","3423379967","US","United States"
+# US, because ARIN says 199.255.208.0-199.255.215.255 is US.
+# Changed entry start from 199.255.213.0 to 199.255.208.0 on 2013-08-12.
+# -KL 2013-08-12
+"199.255.208.0","199.255.215.255","3355430912","3355432959","US","United States"
# US, because previous MaxMind entry 209.58.176.144-209.59.31.255 is US,
# and RIR delegation files say 209.59.32.0-209.59.63.255 is US.
diff --git a/src/ext/eventdns.c b/src/ext/eventdns.c
index 66280cccd..8b934c443 100644
--- a/src/ext/eventdns.c
+++ b/src/ext/eventdns.c
@@ -2298,6 +2298,10 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
evtimer_set(&ns->timeout_event, nameserver_prod_callback, ns);
+#if 1
+ ns->socket = tor_open_socket_nonblocking(address->sa_family, SOCK_DGRAM, 0);
+ if (!SOCKET_OK(ns->socket)) { err = 1; goto out1; }
+#else
ns->socket = tor_open_socket(address->sa_family, SOCK_DGRAM, 0);
if (ns->socket < 0) { err = 1; goto out1; }
#ifdef _WIN32
@@ -2314,6 +2318,7 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
}
#endif
+#endif /* 1 */
if (global_bind_addr_is_set &&
!sockaddr_is_loopback((struct sockaddr*)&global_bind_address)) {
if (bind(ns->socket, (struct sockaddr *)&global_bind_address,
@@ -3473,8 +3478,12 @@ main(int c, char **v) {
if (servertest) {
int sock;
struct sockaddr_in my_addr;
+#if 1
+ sock = tor_open_socket_nonblocking(PF_INET, SOCK_DGRAM, 0)
+#else
sock = tor_open_socket(PF_INET, SOCK_DGRAM, 0);
fcntl(sock, F_SETFL, O_NONBLOCK);
+#endif
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(10053);
my_addr.sin_addr.s_addr = INADDR_ANY;
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 79e4b7c5e..9bc79bd84 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -798,7 +798,7 @@ address_is_in_virtual_range(const char *address)
/** Return a random address conforming to the virtual address configuration
* in <b>conf</b>.
*/
-/* private */ void
+STATIC void
get_random_virtual_addr(const virtual_addr_conf_t *conf, tor_addr_t *addr_out)
{
uint8_t tmp[4];
diff --git a/src/or/addressmap.h b/src/or/addressmap.h
index 40210ee99..417832b31 100644
--- a/src/or/addressmap.h
+++ b/src/or/addressmap.h
@@ -7,6 +7,8 @@
#ifndef TOR_ADDRESSMAP_H
#define TOR_ADDRESSMAP_H
+#include "testsupport.h"
+
void addressmap_init(void);
void addressmap_clear_excluded_trackexithosts(const or_options_t *options);
void addressmap_clear_invalid_automaps(const or_options_t *options);
@@ -52,8 +54,8 @@ typedef struct virtual_addr_conf_t {
maskbits_t bits;
} virtual_addr_conf_t;
-void get_random_virtual_addr(const virtual_addr_conf_t *conf,
- tor_addr_t *addr_out);
+STATIC void get_random_virtual_addr(const virtual_addr_conf_t *conf,
+ tor_addr_t *addr_out);
#endif
#endif
diff --git a/src/or/buffers.c b/src/or/buffers.c
index c4c847ec8..50016d3a8 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -19,6 +19,7 @@
#include "connection_or.h"
#include "control.h"
#include "reasons.h"
+#include "ext_orport.h"
#include "../common/util.h"
#include "../common/torlog.h"
#ifdef HAVE_UNISTD_H
@@ -1294,7 +1295,7 @@ buf_matches_at_pos(const buf_pos_t *pos, const char *s, size_t n)
/** Return the first position in <b>buf</b> at which the <b>n</b>-character
* string <b>s</b> occurs, or -1 if it does not occur. */
-/*private*/ int
+STATIC int
buf_find_string_offset(const buf_t *buf, const char *s, size_t n)
{
buf_pos_t pos;
@@ -1702,6 +1703,64 @@ fetch_from_evbuffer_socks(struct evbuffer *buf, socks_request_t *req,
}
#endif
+/** The size of the header of an Extended ORPort message: 2 bytes for
+ * COMMAND, 2 bytes for BODYLEN */
+#define EXT_OR_CMD_HEADER_SIZE 4
+
+/** Read <b>buf</b>, which should contain an Extended ORPort message
+ * from a transport proxy. If well-formed, create and populate
+ * <b>out</b> with the Extended ORport message. Return 0 if the
+ * buffer was incomplete, 1 if it was well-formed and -1 if we
+ * encountered an error while parsing it. */
+int
+fetch_ext_or_command_from_buf(buf_t *buf, ext_or_cmd_t **out)
+{
+ char hdr[EXT_OR_CMD_HEADER_SIZE];
+ uint16_t len;
+
+ check();
+ if (buf->datalen < EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ peek_from_buf(hdr, sizeof(hdr), buf);
+ len = ntohs(get_uint16(hdr+2));
+ if (buf->datalen < (unsigned)len + EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ *out = ext_or_cmd_new(len);
+ (*out)->cmd = ntohs(get_uint16(hdr));
+ (*out)->len = len;
+ buf_remove_from_front(buf, EXT_OR_CMD_HEADER_SIZE);
+ fetch_from_buf((*out)->body, len, buf);
+ return 1;
+}
+
+#ifdef USE_BUFFEREVENTS
+/** Read <b>buf</b>, which should contain an Extended ORPort message
+ * from a transport proxy. If well-formed, create and populate
+ * <b>out</b> with the Extended ORport message. Return 0 if the
+ * buffer was incomplete, 1 if it was well-formed and -1 if we
+ * encountered an error while parsing it. */
+int
+fetch_ext_or_command_from_evbuffer(struct evbuffer *buf, ext_or_cmd_t **out)
+{
+ char hdr[EXT_OR_CMD_HEADER_SIZE];
+ uint16_t len;
+ size_t buf_len = evbuffer_get_length(buf);
+
+ if (buf_len < EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ evbuffer_copyout(buf, hdr, EXT_OR_CMD_HEADER_SIZE);
+ len = ntohs(get_uint16(hdr+2));
+ if (buf_len < (unsigned)len + EXT_OR_CMD_HEADER_SIZE)
+ return 0;
+ *out = ext_or_cmd_new(len);
+ (*out)->cmd = ntohs(get_uint16(hdr));
+ (*out)->len = len;
+ evbuffer_drain(buf, EXT_OR_CMD_HEADER_SIZE);
+ evbuffer_remove(buf, (*out)->body, len);
+ return 1;
+}
+#endif
+
/** Implementation helper to implement fetch_from_*_socks. Instead of looking
* at a buffer's contents, we look at the <b>datalen</b> bytes of data in
* <b>data</b>. Instead of removing data from the buffer, we set
diff --git a/src/or/buffers.h b/src/or/buffers.h
index c947f0ba9..48b118520 100644
--- a/src/or/buffers.h
+++ b/src/or/buffers.h
@@ -12,6 +12,8 @@
#ifndef TOR_BUFFERS_H
#define TOR_BUFFERS_H
+#include "testsupport.h"
+
buf_t *buf_new(void);
buf_t *buf_new_with_capacity(size_t size);
void buf_free(buf_t *buf);
@@ -51,6 +53,8 @@ int fetch_from_buf_line(buf_t *buf, char *data_out, size_t *data_len);
int peek_buf_has_control0_command(buf_t *buf);
+int fetch_ext_or_command_from_buf(buf_t *buf, ext_or_cmd_t **out);
+
#ifdef USE_BUFFEREVENTS
int fetch_var_cell_from_evbuffer(struct evbuffer *buf, var_cell_t **out,
int linkproto);
@@ -66,6 +70,8 @@ int peek_evbuffer_has_control0_command(struct evbuffer *buf);
int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
const char *data, size_t data_len,
int done);
+int fetch_ext_or_command_from_evbuffer(struct evbuffer *buf,
+ ext_or_cmd_t **out);
#endif
#ifdef USE_BUFFEREVENTS
@@ -75,6 +81,8 @@ int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
#define generic_buffer_get(b,buf,buflen) evbuffer_remove((b),(buf),(buflen))
#define generic_buffer_clear(b) evbuffer_drain((b), evbuffer_get_length((b)))
#define generic_buffer_free(b) evbuffer_free((b))
+#define generic_buffer_fetch_ext_or_cmd(b, out) \
+ fetch_ext_or_command_from_evbuffer((b), (out))
#else
#define generic_buffer_new() buf_new()
#define generic_buffer_len(b) buf_datalen((b))
@@ -82,6 +90,8 @@ int write_to_evbuffer_zlib(struct evbuffer *buf, tor_zlib_state_t *state,
#define generic_buffer_get(b,buf,buflen) fetch_from_buf((buf),(buflen),(b))
#define generic_buffer_clear(b) buf_clear((b))
#define generic_buffer_free(b) buf_free((b))
+#define generic_buffer_fetch_ext_or_cmd(b, out) \
+ fetch_ext_or_command_from_buf((b), (out))
#endif
int generic_buffer_set_to_copy(generic_buffer_t **output,
const generic_buffer_t *input);
@@ -89,7 +99,7 @@ int generic_buffer_set_to_copy(generic_buffer_t **output,
void assert_buf_ok(buf_t *buf);
#ifdef BUFFERS_PRIVATE
-int buf_find_string_offset(const buf_t *buf, const char *s, size_t n);
+STATIC int buf_find_string_offset(const buf_t *buf, const char *s, size_t n);
#endif
#endif
diff --git a/src/or/channel.c b/src/or/channel.c
index 98c23d91e..48bbf7902 100644
--- a/src/or/channel.c
+++ b/src/or/channel.c
@@ -2379,8 +2379,14 @@ channel_do_open_actions(channel_t *chan)
/* only report it to the geoip module if it's not a known router */
if (!router_get_by_id_digest(chan->identity_digest)) {
if (channel_get_addr_if_possible(chan, &remote_addr)) {
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &remote_addr,
+ char *transport_name = NULL;
+ if (chan->get_transport_name(chan, &transport_name) < 0)
+ transport_name = NULL;
+
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT,
+ &remote_addr, transport_name,
now);
+ tor_free(transport_name);
}
/* Otherwise the underlying transport can't tell us this, so skip it */
}
@@ -3090,7 +3096,7 @@ channel_get_for_extend(const char *digest,
if (chan->state != CHANNEL_STATE_OPEN) {
/* If the address matches, don't launch a new connection for this
* circuit. */
- if (!channel_matches_target_addr_for_extend(chan, target_addr))
+ if (channel_matches_target_addr_for_extend(chan, target_addr))
++n_inprogress_goodaddr;
continue;
}
@@ -4106,7 +4112,7 @@ channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info)
}
/**
- * Check if a channel matches a given target address
+ * Check if a channel matches a given target address; return true iff we do.
*
* This function calls into the lower layer and asks if this channel thinks
* it matches a given target address for circuit extension purposes.
diff --git a/src/or/channel.h b/src/or/channel.h
index 8f082206b..430a0251a 100644
--- a/src/or/channel.h
+++ b/src/or/channel.h
@@ -83,6 +83,8 @@ struct channel_s {
* available.
*/
int (*get_remote_addr)(channel_t *, tor_addr_t *);
+ int (*get_transport_name)(channel_t *chan, char **transport_out);
+
#define GRD_FLAG_ORIGINAL 1
#define GRD_FLAG_ADDR_ONLY 2
/*
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index 60693daeb..7303c5a72 100644
--- a/src/or/channeltls.c
+++ b/src/or/channeltls.c
@@ -55,6 +55,8 @@ static void channel_tls_close_method(channel_t *chan);
static const char * channel_tls_describe_transport_method(channel_t *chan);
static int
channel_tls_get_remote_addr_method(channel_t *chan, tor_addr_t *addr_out);
+static int
+channel_tls_get_transport_name_method(channel_t *chan, char **transport_out);
static const char *
channel_tls_get_remote_descr_method(channel_t *chan, int flags);
static int channel_tls_has_queued_writes_method(channel_t *chan);
@@ -114,6 +116,7 @@ channel_tls_common_init(channel_tls_t *tlschan)
chan->describe_transport = channel_tls_describe_transport_method;
chan->get_remote_addr = channel_tls_get_remote_addr_method;
chan->get_remote_descr = channel_tls_get_remote_descr_method;
+ chan->get_transport_name = channel_tls_get_transport_name_method;
chan->has_queued_writes = channel_tls_has_queued_writes_method;
chan->is_canonical = channel_tls_is_canonical_method;
chan->matches_extend_info = channel_tls_matches_extend_info_method;
@@ -406,6 +409,30 @@ channel_tls_get_remote_addr_method(channel_t *chan, tor_addr_t *addr_out)
}
/**
+ * Get the name of the pluggable transport used by a channel_tls_t.
+ *
+ * This implements the get_transport_name for channel_tls_t. If the
+ * channel uses a pluggable transport, copy its name to
+ * <b>transport_out</b> and return 0. If the channel did not use a
+ * pluggable transport, return -1. */
+
+static int
+channel_tls_get_transport_name_method(channel_t *chan, char **transport_out)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(transport_out);
+ tor_assert(tlschan->conn);
+
+ if (!tlschan->conn->ext_or_transport)
+ return -1;
+
+ *transport_out = tor_strdup(tlschan->conn->ext_or_transport);
+ return 0;
+}
+
+/**
* Get endpoint description of a channel_tls_t
*
* This implements the get_remote_descr method for channel_tls_t; it returns
@@ -546,7 +573,7 @@ channel_tls_matches_extend_info_method(channel_t *chan,
}
/**
- * Check if we match a target address
+ * Check if we match a target address; return true iff we do.
*
* This implements the matches_target method for channel_tls t_; the upper
* layer wants to know if this channel matches a target address when extending
@@ -563,8 +590,7 @@ channel_tls_matches_target_method(channel_t *chan,
tor_assert(target);
tor_assert(tlschan->conn);
- return tor_addr_compare(&(tlschan->conn->real_addr),
- target, CMP_EXACT);
+ return tor_addr_eq(&(tlschan->conn->real_addr), target);
}
/**
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 6bf18590a..a4144e800 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -8,7 +8,7 @@
* \file circuitlist.c
* \brief Manage the global circuit list.
**/
-
+#define CIRCUITLIST_PRIVATE
#include "or.h"
#include "channel.h"
#include "circuitbuild.h"
@@ -42,7 +42,6 @@ struct global_circuitlist_s global_circuitlist =
/** A list of all the circuits in CIRCUIT_STATE_CHAN_WAIT. */
static smartlist_t *circuits_pending_chans = NULL;
-static void circuit_free(circuit_t *circ);
static void circuit_free_cpath(crypt_path_t *cpath);
static void circuit_free_cpath_node(crypt_path_t *victim);
static void cpath_ref_decref(crypt_path_reference_t *cpath_ref);
@@ -653,6 +652,7 @@ init_circuit_base(circuit_t *circ)
circ->package_window = circuit_initial_package_window();
circ->deliver_window = CIRCWINDOW_START;
+ cell_queue_init(&circ->n_chan_cells);
TOR_LIST_INSERT_HEAD(&global_circuitlist, circ, head);
}
@@ -698,6 +698,7 @@ or_circuit_new(circid_t p_circ_id, channel_t *p_chan)
circuit_set_p_circid_chan(circ, p_circ_id, p_chan);
circ->remaining_relay_early_cells = MAX_RELAY_EARLY_CELLS_PER_CIRCUIT;
+ cell_queue_init(&circ->p_chan_cells);
init_circuit_base(TO_CIRCUIT(circ));
@@ -706,7 +707,7 @@ or_circuit_new(circid_t p_circ_id, channel_t *p_chan)
/** Deallocate space associated with circ.
*/
-static void
+STATIC void
circuit_free(circuit_t *circ)
{
void *mem;
@@ -1607,12 +1608,14 @@ marked_circuit_free_cells(circuit_t *circ)
}
/** Return the number of cells used by the circuit <b>c</b>'s cell queues. */
-static size_t
+STATIC size_t
n_cells_in_circ_queues(const circuit_t *c)
{
size_t n = c->n_chan_cells.n;
- if (! CIRCUIT_IS_ORIGIN(c))
- n += TO_OR_CIRCUIT((circuit_t*)c)->p_chan_cells.n;
+ if (! CIRCUIT_IS_ORIGIN(c)) {
+ circuit_t *cc = (circuit_t *) c;
+ n += TO_OR_CIRCUIT(cc)->p_chan_cells.n;
+ }
return n;
}
diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h
index 4726b3be5..a43315d23 100644
--- a/src/or/circuitlist.h
+++ b/src/or/circuitlist.h
@@ -12,6 +12,8 @@
#ifndef TOR_CIRCUITLIST_H
#define TOR_CIRCUITLIST_H
+#include "testsupport.h"
+
TOR_LIST_HEAD(global_circuitlist_s, circuit_t);
struct global_circuitlist_s* circuit_get_global_list_(void);
@@ -70,5 +72,10 @@ void circuits_handle_oom(size_t current_allocation);
void channel_note_destroy_pending(channel_t *chan, circid_t id);
void channel_note_destroy_not_pending(channel_t *chan, circid_t id);
+#ifdef CIRCUITLIST_PRIVATE
+STATIC void circuit_free(circuit_t *circ);
+STATIC size_t n_cells_in_circ_queues(const circuit_t *c);
+#endif
+
#endif
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c
index c84e0ce09..47b423066 100644
--- a/src/or/circuitmux.c
+++ b/src/or/circuitmux.c
@@ -383,6 +383,7 @@ circuitmux_alloc(void)
rv = tor_malloc_zero(sizeof(*rv));
rv->chanid_circid_map = tor_malloc_zero(sizeof(*( rv->chanid_circid_map)));
HT_INIT(chanid_circid_muxinfo_map, rv->chanid_circid_map);
+ cell_queue_init(&rv->destroy_cell_queue);
return rv;
}
@@ -510,7 +511,7 @@ circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux, channel_t *chan)
{
packed_cell_t *cell;
int n_bad = 0;
- for (cell = cmux->destroy_cell_queue.head; cell; cell = cell->next) {
+ TOR_SIMPLEQ_FOREACH(cell, &cmux->destroy_cell_queue.head, next) {
circid_t circid = 0;
if (packed_cell_is_destroy(chan, cell, &circid)) {
channel_mark_circid_usable(chan, circid);
@@ -922,9 +923,9 @@ circuitmux_num_circuits(circuitmux_t *cmux)
* Attach a circuit to a circuitmux, for the specified direction.
*/
-void
-circuitmux_attach_circuit(circuitmux_t *cmux, circuit_t *circ,
- cell_direction_t direction)
+MOCK_IMPL(void,
+circuitmux_attach_circuit,(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction))
{
channel_t *chan = NULL;
uint64_t channel_id;
@@ -1071,8 +1072,8 @@ circuitmux_attach_circuit(circuitmux_t *cmux, circuit_t *circ,
* no-op if not attached.
*/
-void
-circuitmux_detach_circuit(circuitmux_t *cmux, circuit_t *circ)
+MOCK_IMPL(void,
+circuitmux_detach_circuit,(circuitmux_t *cmux, circuit_t *circ))
{
chanid_circid_muxinfo_t search, *hashent = NULL;
/*
diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h
index a6bc415cd..ee2f5d153 100644
--- a/src/or/circuitmux.h
+++ b/src/or/circuitmux.h
@@ -10,6 +10,7 @@
#define TOR_CIRCUITMUX_H
#include "or.h"
+#include "testsupport.h"
typedef struct circuitmux_policy_s circuitmux_policy_t;
typedef struct circuitmux_policy_data_s circuitmux_policy_data_t;
@@ -127,9 +128,11 @@ void circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
void circuitmux_notify_xmit_destroy(circuitmux_t *cmux);
/* Circuit interface */
-void circuitmux_attach_circuit(circuitmux_t *cmux, circuit_t *circ,
- cell_direction_t direction);
-void circuitmux_detach_circuit(circuitmux_t *cmux, circuit_t *circ);
+MOCK_DECL(void, circuitmux_attach_circuit, (circuitmux_t *cmux,
+ circuit_t *circ,
+ cell_direction_t direction));
+MOCK_DECL(void, circuitmux_detach_circuit,
+ (circuitmux_t *cmux, circuit_t *circ));
void circuitmux_clear_num_cells(circuitmux_t *cmux, circuit_t *circ);
void circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
unsigned int n_cells);
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
index 1d7812bf2..95129f9a4 100644
--- a/src/or/circuitstats.c
+++ b/src/or/circuitstats.c
@@ -29,9 +29,13 @@
/* XXXX024 Make this static; add accessor functions. */
circuit_build_times_t circ_times;
+#ifdef TOR_UNIT_TESTS
/** If set, we're running the unit tests: we should avoid clobbering
* our state file or accessing get_options() or get_or_state() */
static int unit_tests = 0;
+#else
+#define unit_tests 0
+#endif
/**
* This function decides if CBT learning should be disabled. It returns
@@ -438,7 +442,7 @@ circuit_build_times_get_initial_timeout(void)
* Leave estimated parameters, timeout and network liveness intact
* for future use.
*/
-void
+STATIC void
circuit_build_times_reset(circuit_build_times_t *cbt)
{
memset(cbt->circuit_build_times, 0, sizeof(cbt->circuit_build_times));
@@ -949,7 +953,7 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt,
* an acceptable approximation because we are only concerned with the
* accuracy of the CDF of the tail.
*/
-int
+STATIC int
circuit_build_times_update_alpha(circuit_build_times_t *cbt)
{
build_time_t *x=cbt->circuit_build_times;
@@ -1033,7 +1037,7 @@ circuit_build_times_update_alpha(circuit_build_times_t *cbt)
*
* Return value is in milliseconds.
*/
-double
+STATIC double
circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
double quantile)
{
@@ -1050,6 +1054,7 @@ circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
return ret;
}
+#ifdef TOR_UNIT_TESTS
/** Pareto CDF */
double
circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
@@ -1060,7 +1065,9 @@ circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
tor_assert(0 <= ret && ret <= 1.0);
return ret;
}
+#endif
+#ifdef TOR_UNIT_TESTS
/**
* Generate a synthetic time using our distribution parameters.
*
@@ -1093,7 +1100,9 @@ circuit_build_times_generate_sample(circuit_build_times_t *cbt,
tor_assert(ret > 0);
return ret;
}
+#endif
+#ifdef TOR_UNIT_TESTS
/**
* Estimate an initial alpha parameter by solving the quantile
* function with a quantile point and a specific timeout value.
@@ -1114,6 +1123,7 @@ circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
(tor_mathlog(cbt->Xm)-tor_mathlog(timeout_ms));
tor_assert(cbt->alpha > 0);
}
+#endif
/**
* Returns true if we need circuits to be built
@@ -1282,7 +1292,7 @@ circuit_build_times_network_check_live(circuit_build_times_t *cbt)
* to restart the process of building test circuits and estimating a
* new timeout.
*/
-int
+STATIC int
circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
{
int total_build_times = cbt->total_build_times;
@@ -1546,6 +1556,8 @@ circuit_build_times_set_timeout(circuit_build_times_t *cbt)
cbt->total_build_times);
}
}
+
+#ifdef TOR_UNIT_TESTS
/** Make a note that we're running unit tests (rather than running Tor
* itself), so we avoid clobbering our state file. */
void
@@ -1553,4 +1565,5 @@ circuitbuild_running_unit_tests(void)
{
unit_tests = 1;
}
+#endif
diff --git a/src/or/circuitstats.h b/src/or/circuitstats.h
index 87dce99f4..53ba2b2d2 100644
--- a/src/or/circuitstats.h
+++ b/src/or/circuitstats.h
@@ -38,19 +38,23 @@ double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt);
double circuit_build_times_close_rate(const circuit_build_times_t *cbt);
#ifdef CIRCUITSTATS_PRIVATE
-double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
+STATIC double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
double quantile);
+STATIC int circuit_build_times_update_alpha(circuit_build_times_t *cbt);
+STATIC void circuit_build_times_reset(circuit_build_times_t *cbt);
+
+/* Network liveness functions */
+STATIC int circuit_build_times_network_check_changed(
+ circuit_build_times_t *cbt);
+#endif
+
+#ifdef TOR_UNIT_TESTS
build_time_t circuit_build_times_generate_sample(circuit_build_times_t *cbt,
double q_lo, double q_hi);
+double circuit_build_times_cdf(circuit_build_times_t *cbt, double x);
void circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
double quantile, double time_ms);
-int circuit_build_times_update_alpha(circuit_build_times_t *cbt);
-double circuit_build_times_cdf(circuit_build_times_t *cbt, double x);
void circuitbuild_running_unit_tests(void);
-void circuit_build_times_reset(circuit_build_times_t *cbt);
-
-/* Network liveness functions */
-int circuit_build_times_network_check_changed(circuit_build_times_t *cbt);
#endif
/* Network liveness functions */
@@ -58,8 +62,5 @@ void circuit_build_times_network_is_live(circuit_build_times_t *cbt);
int circuit_build_times_network_check_live(circuit_build_times_t *cbt);
void circuit_build_times_network_circ_success(circuit_build_times_t *cbt);
-/* DOCDOC circuit_build_times_get_bw_scale */
-int circuit_build_times_get_bw_scale(networkstatus_t *ns);
-
#endif
diff --git a/src/or/config.c b/src/or/config.c
index e3ffbf208..e746da220 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -10,7 +10,6 @@
**/
#define CONFIG_PRIVATE
-
#include "or.h"
#include "addressmap.h"
#include "channel.h"
@@ -40,11 +39,13 @@
#include "rendservice.h"
#include "rephist.h"
#include "router.h"
+#include "sandbox.h"
#include "util.h"
#include "routerlist.h"
#include "routerset.h"
#include "statefile.h"
#include "transports.h"
+#include "ext_orport.h"
#ifdef _WIN32
#include <shlobj.h>
#endif
@@ -230,6 +231,7 @@ static config_var_t option_vars_[] = {
V(ExitPolicyRejectPrivate, BOOL, "1"),
V(ExitPortStatistics, BOOL, "0"),
V(ExtendAllowPrivateAddresses, BOOL, "0"),
+ VPORT(ExtORPort, LINELIST, NULL),
V(ExtraInfoStatistics, BOOL, "1"),
V(FallbackDir, LINELIST, NULL),
@@ -281,6 +283,7 @@ static config_var_t option_vars_[] = {
V(IPv6Exit, BOOL, "0"),
VAR("ServerTransportPlugin", LINELIST, ServerTransportPlugin, NULL),
V(ServerTransportListenAddr, LINELIST, NULL),
+ V(ServerTransportOptions, LINELIST, NULL),
V(Socks4Proxy, STRING, NULL),
V(Socks5Proxy, STRING, NULL),
V(Socks5ProxyUsername, STRING, NULL),
@@ -314,7 +317,7 @@ static config_var_t option_vars_[] = {
OBSOLETE("NoPublish"),
VAR("NodeFamily", LINELIST, NodeFamilies, NULL),
V(NumCPUs, UINT, "0"),
- V(NumDirectoryGuards, UINT, "3"),
+ V(NumDirectoryGuards, UINT, "0"),
V(NumEntryGuards, UINT, "3"),
V(ORListenAddress, LINELIST, NULL),
VPORT(ORPort, LINELIST, NULL),
@@ -370,6 +373,7 @@ static config_var_t option_vars_[] = {
V(RunAsDaemon, BOOL, "0"),
// V(RunTesting, BOOL, "0"),
OBSOLETE("RunTesting"), // currently unused
+ V(Sandbox, BOOL, "0"),
V(SafeLogging, STRING, "1"),
V(SafeSocks, BOOL, "0"),
V(ServerDNSAllowBrokenConfig, BOOL, "1"),
@@ -508,10 +512,6 @@ static const config_var_t testing_tor_network_defaults[] = {
#ifdef _WIN32
static char *get_windows_conf_root(void);
#endif
-static int options_validate(or_options_t *old_options,
- or_options_t *options,
- or_options_t *default_options,
- int from_setconf, char **msg);
static int options_act_reversible(const or_options_t *old_options, char **msg);
static int options_act(const or_options_t *old_options);
static int options_transition_allowed(const or_options_t *old,
@@ -555,7 +555,7 @@ static void config_maybe_load_geoip_files_(const or_options_t *options,
#define OR_OPTIONS_MAGIC 9090909
/** Configuration format for or_options_t. */
-static config_format_t options_format = {
+STATIC config_format_t options_format = {
sizeof(or_options_t),
OR_OPTIONS_MAGIC,
STRUCT_OFFSET(or_options_t, magic_),
@@ -711,7 +711,7 @@ get_short_version(void)
/** Release additional memory allocated in options
*/
-static void
+STATIC void
or_options_free(or_options_t *options)
{
if (!options)
@@ -1005,6 +1005,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
int set_conn_limit = 0;
int r = -1;
int logs_marked = 0;
+ int old_min_log_level = get_min_log_level();
/* Daemonize _first_, since we only want to open most of this stuff in
* the subprocess. Libevent bases can't be reliably inherited across
@@ -1143,6 +1144,8 @@ options_act_reversible(const or_options_t *old_options, char **msg)
goto rollback;
}
+ sandbox_set_debugging_fd(get_err_logging_fd());
+
commit:
r = 0;
if (logs_marked) {
@@ -1153,6 +1156,13 @@ options_act_reversible(const or_options_t *old_options, char **msg)
control_adjust_event_log_severity();
tor_free(severity);
}
+ if (get_min_log_level() >= LOG_INFO &&
+ get_min_log_level() != old_min_log_level) {
+ log_warn(LD_GENERAL, "Your log may contain sensitive information - you're "
+ "logging above \"notice\". Please log safely. Don't log unless "
+ "it serves an important reason. Overwrite the log afterwards.");
+ }
+
SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn,
{
log_notice(LD_NET, "Closing old %s on %s:%d",
@@ -1335,6 +1345,13 @@ options_act(const or_options_t *old_options)
}
#endif
+ if (options->SafeLogging_ != SAFELOG_SCRUB_ALL &&
+ (!old_options || old_options->SafeLogging_ != options->SafeLogging_)) {
+ log_warn(LD_GENERAL, "Your log may contain sensitive information - you "
+ "disabled SafeLogging. Please log safely. Don't log unless it "
+ "serves an important reason. Overwrite the log afterwards.");
+ }
+
if (options->Bridges) {
mark_bridge_list();
for (cl = options->Bridges; cl; cl = cl->next) {
@@ -1458,8 +1475,14 @@ options_act(const or_options_t *old_options)
return -1;
}
- if (init_cookie_authentication(options->CookieAuthentication) < 0) {
- log_warn(LD_CONFIG,"Error creating cookie authentication file.");
+ if (init_control_cookie_authentication(options->CookieAuthentication) < 0) {
+ log_warn(LD_CONFIG,"Error creating control cookie authentication file.");
+ return -1;
+ }
+
+ /* If we have an ExtORPort, initialize its auth cookie. */
+ if (init_ext_or_cookie_authentication(!!options->ExtORPort_lines) < 0) {
+ log_warn(LD_CONFIG,"Error creating Extended ORPort cookie file.");
return -1;
}
@@ -2331,7 +2354,7 @@ compute_publishserverdescriptor(or_options_t *options)
* Log line should stay empty. If it's 0, then give us a default log
* if there are no logs defined.
*/
-static int
+STATIC int
options_validate(or_options_t *old_options, or_options_t *options,
or_options_t *default_options, int from_setconf, char **msg)
{
@@ -3130,6 +3153,19 @@ options_validate(or_options_t *old_options, or_options_t *options,
"ServerTransportListenAddr line will be ignored.");
}
+ for (cl = options->ServerTransportOptions; cl; cl = cl->next) {
+ /** If get_options_from_transport_options_line() fails with
+ 'transport' being NULL, it means that something went wrong
+ while parsing the ServerTransportOptions line. */
+ smartlist_t *options_sl =
+ get_options_from_transport_options_line(cl->value, NULL);
+ if (!options_sl)
+ REJECT("ServerTransportOptions did not parse. See logs for details.");
+
+ SMARTLIST_FOREACH(options_sl, char *, cp, tor_free(cp));
+ smartlist_free(options_sl);
+ }
+
if (options->ConstrainedSockets) {
/* If the user wants to constrain socket buffer use, make sure the desired
* limit is between MIN|MAX_TCPSOCK_BUFFER in k increments. */
@@ -3800,6 +3836,7 @@ options_init_from_torrc(int argc, char **argv)
}
if (command == CMD_HASH_PASSWORD) {
+ cf_defaults = tor_strdup("");
cf = tor_strdup("");
} else {
cf_defaults = load_torrc_from_disk(argc, argv, 1);
@@ -3871,6 +3908,10 @@ options_init_from_string(const char *cf_defaults, const char *cf,
newdefaultoptions = config_dup(&options_format, newoptions);
}
+ if (newdefaultoptions == NULL) {
+ newdefaultoptions = config_dup(&options_format, global_default_options);
+ }
+
/* Go through command-line variables too */
retval = config_assign(&options_format, newoptions,
global_cmdline_options, 0, 0, msg);
@@ -4559,6 +4600,63 @@ get_bindaddr_from_transport_listen_line(const char *line,const char *transport)
return addrport;
}
+/** Given a ServerTransportOptions <b>line</b>, return a smartlist
+ * with the options. Return NULL if the line was not well-formed.
+ *
+ * If <b>transport</b> is set, return NULL if the line is not
+ * referring to <b>transport</b>.
+ *
+ * The returned smartlist and its strings are allocated on the heap
+ * and it's the responsibility of the caller to free it. */
+smartlist_t *
+get_options_from_transport_options_line(const char *line,const char *transport)
+{
+ smartlist_t *items = smartlist_new();
+ smartlist_t *options = smartlist_new();
+ const char *parsed_transport = NULL;
+
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(items) < 2) {
+ log_warn(LD_CONFIG,"Too few arguments on ServerTransportOptions line.");
+ goto err;
+ }
+
+ parsed_transport = smartlist_get(items, 0);
+ /* If 'transport' is given, check if it matches the one on the line */
+ if (transport && strcmp(transport, parsed_transport))
+ goto err;
+
+ SMARTLIST_FOREACH_BEGIN(items, const char *, option) {
+ if (option_sl_idx == 0) /* skip the transport field (first field)*/
+ continue;
+
+ /* validate that it's a k=v value */
+ if (!string_is_key_value(LOG_WARN, option)) {
+ log_warn(LD_CONFIG, "%s is not a k=v value.", escaped(option));
+ goto err;
+ }
+
+ /* add it to the options smartlist */
+ smartlist_add(options, tor_strdup(option));
+ log_debug(LD_CONFIG, "Added %s to the list of options", escaped(option));
+ } SMARTLIST_FOREACH_END(option);
+
+ goto done;
+
+ err:
+ SMARTLIST_FOREACH(options, char*, s, tor_free(s));
+ smartlist_free(options);
+ options = NULL;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+
+ return options;
+}
+
/** Given the name of a pluggable transport in <b>transport</b>, check
* the configuration file to see if the user has explicitly asked for
* it to listen on a specific port. Return a <address:port> string if
@@ -4579,6 +4677,26 @@ get_transport_bindaddr_from_config(const char *transport)
return NULL;
}
+/** Given the name of a pluggable transport in <b>transport</b>, check
+ * the configuration file to see if the user has asked us to pass any
+ * parameters to the pluggable transport. Return a smartlist
+ * containing the parameters, otherwise NULL. */
+smartlist_t *
+get_options_for_server_transport(const char *transport)
+{
+ config_line_t *cl;
+ const or_options_t *options = get_options();
+
+ for (cl = options->ServerTransportOptions; cl; cl = cl->next) {
+ smartlist_t *options_sl =
+ get_options_from_transport_options_line(cl->value, transport);
+ if (options_sl)
+ return options_sl;
+ }
+
+ return NULL;
+}
+
/** Read the contents of a ServerTransportPlugin line from
* <b>line</b>. Return 0 if the line is well-formed, and -1 if it
* isn't.
@@ -4983,6 +5101,27 @@ warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname,
} SMARTLIST_FOREACH_END(port);
}
+/** Warn for every Extended ORPort port in <b>ports</b> that is on a
+ * publicly routable address. */
+static void
+warn_nonlocal_ext_orports(const smartlist_t *ports, const char *portname)
+{
+ SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
+ if (port->type != CONN_TYPE_EXT_OR_LISTENER)
+ continue;
+ if (port->is_unix_addr)
+ continue;
+ /* XXX maybe warn even if address is RFC1918? */
+ if (!tor_addr_is_internal(&port->addr, 1)) {
+ log_warn(LD_CONFIG, "You specified a public address '%s' for %sPort. "
+ "This is not advised; this address is supposed to only be "
+ "exposed on localhost so that your pluggable transport "
+ "proxies can connect to it.",
+ fmt_addrport(&port->addr, port->port), portname);
+ }
+ } SMARTLIST_FOREACH_END(port);
+}
+
/** Given a list of port_cfg_t in <b>ports</b>, warn any controller port there
* is listening on any non-loopback address. If <b>forbid</b> is true,
* then emit a stronger warning and remove the port from the list.
@@ -5083,6 +5222,7 @@ parse_port_config(smartlist_t *out,
smartlist_t *elts;
int retval = -1;
const unsigned is_control = (listener_type == CONN_TYPE_CONTROL_LISTENER);
+ const unsigned is_ext_orport = (listener_type == CONN_TYPE_EXT_OR_LISTENER);
const unsigned allow_no_options = flags & CL_PORT_NO_OPTIONS;
const unsigned use_server_options = flags & CL_PORT_SERVER_OPTIONS;
const unsigned warn_nonlocal = flags & CL_PORT_WARN_NONLOCAL;
@@ -5160,6 +5300,8 @@ parse_port_config(smartlist_t *out,
if (warn_nonlocal && out) {
if (is_control)
warn_nonlocal_controller_ports(out, forbid_nonlocal);
+ else if (is_ext_orport)
+ warn_nonlocal_ext_orports(out, portname);
else
warn_nonlocal_client_ports(out, portname, listener_type);
}
@@ -5433,6 +5575,8 @@ parse_port_config(smartlist_t *out,
if (warn_nonlocal && out) {
if (is_control)
warn_nonlocal_controller_ports(out, forbid_nonlocal);
+ else if (is_ext_orport)
+ warn_nonlocal_ext_orports(out, portname);
else
warn_nonlocal_client_ports(out, portname, listener_type);
}
@@ -5579,6 +5723,14 @@ parse_ports(or_options_t *options, int validate_only,
goto err;
}
if (parse_port_config(ports,
+ options->ExtORPort_lines, NULL,
+ "ExtOR", CONN_TYPE_EXT_OR_LISTENER,
+ "127.0.0.1", 0,
+ CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) {
+ *msg = tor_strdup("Invalid ExtORPort configuration");
+ goto err;
+ }
+ if (parse_port_config(ports,
options->DirPort_lines, options->DirListenAddress,
"Dir", CONN_TYPE_DIR_LISTENER,
"0.0.0.0", 0,
@@ -5613,6 +5765,8 @@ parse_ports(or_options_t *options, int validate_only,
!! count_real_listeners(ports, CONN_TYPE_DIR_LISTENER);
options->DNSPort_set =
!! count_real_listeners(ports, CONN_TYPE_AP_DNS_LISTENER);
+ options->ExtORPort_set =
+ !! count_real_listeners(ports, CONN_TYPE_EXT_OR_LISTENER);
if (!validate_only) {
if (configured_ports) {
@@ -6311,3 +6465,58 @@ config_maybe_load_geoip_files_(const or_options_t *options,
config_load_geoip_file_(AF_INET6, options->GeoIPv6File, "geoip6");
}
+/** Initialize cookie authentication (used so far by the ControlPort
+ * and Extended ORPort).
+ *
+ * Allocate memory and create a cookie (of length <b>cookie_len</b>)
+ * in <b>cookie_out</b>.
+ * Then write it down to <b>fname</b> and prepend it with <b>header</b>.
+ *
+ * If the whole procedure was successful, set
+ * <b>cookie_is_set_out</b> to True. */
+int
+init_cookie_authentication(const char *fname, const char *header,
+ int cookie_len,
+ uint8_t **cookie_out, int *cookie_is_set_out)
+{
+ char cookie_file_str_len = strlen(header) + cookie_len;
+ char *cookie_file_str = tor_malloc(cookie_file_str_len);
+ int retval = -1;
+
+ /* We don't want to generate a new cookie every time we call
+ * options_act(). One should be enough. */
+ if (*cookie_is_set_out) {
+ retval = 0; /* we are all set */
+ goto done;
+ }
+
+ /* If we've already set the cookie, free it before re-setting
+ it. This can happen if we previously generated a cookie, but
+ couldn't write it to a disk. */
+ if (*cookie_out)
+ tor_free(*cookie_out);
+
+ /* Generate the cookie */
+ *cookie_out = tor_malloc(cookie_len);
+ if (crypto_rand((char *)*cookie_out, cookie_len) < 0)
+ goto done;
+
+ /* Create the string that should be written on the file. */
+ memcpy(cookie_file_str, header, strlen(header));
+ memcpy(cookie_file_str+strlen(header), *cookie_out, cookie_len);
+ if (write_bytes_to_file(fname, cookie_file_str, cookie_file_str_len, 1)) {
+ log_warn(LD_FS,"Error writing auth cookie to %s.", escaped(fname));
+ goto done;
+ }
+
+ /* Success! */
+ log_info(LD_GENERAL, "Generated auth cookie file in '%s'.", escaped(fname));
+ *cookie_is_set_out = 1;
+ retval = 0;
+
+ done:
+ memwipe(cookie_file_str, 0, cookie_file_str_len);
+ tor_free(cookie_file_str);
+ return retval;
+}
+
diff --git a/src/or/config.h b/src/or/config.h
index 0250f645d..eb16e7461 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -90,10 +90,11 @@ uint32_t get_effective_bwburst(const or_options_t *options);
char *get_transport_bindaddr_from_config(const char *transport);
-#ifdef CONFIG_PRIVATE
-/* Used only by config.c and test.c */
+int init_cookie_authentication(const char *fname, const char *header,
+ int cookie_len,
+ uint8_t **cookie_out, int *cookie_is_set_out);
+
or_options_t *options_new(void);
-#endif
void config_register_addressmaps(const or_options_t *options);
/* XXXX024 move to connection_edge.h */
@@ -109,12 +110,27 @@ typedef struct bridge_line_t {
char *transport_name; /* The name of the pluggable transport that
should be used to connect to the bridge. */
char digest[DIGEST_LEN]; /* The bridge's identity key digest. */
- smartlist_t *socks_args;; /* SOCKS arguments for the pluggable
+ smartlist_t *socks_args; /* SOCKS arguments for the pluggable
transport proxy. */
} bridge_line_t;
void bridge_line_free(bridge_line_t *bridge_line);
bridge_line_t *parse_bridge_line(const char *line);
+smartlist_t *get_options_from_transport_options_line(const char *line,
+ const char *transport);
+smartlist_t *get_options_for_server_transport(const char *transport);
+
+#ifdef CONFIG_PRIVATE
+#ifdef TOR_UNIT_TESTS
+extern struct config_format_t options_format;
+#endif
+
+STATIC void or_options_free(or_options_t *options);
+STATIC int options_validate(or_options_t *old_options,
+ or_options_t *options,
+ or_options_t *default_options,
+ int from_setconf, char **msg);
+#endif
#endif
diff --git a/src/or/confparse.c b/src/or/confparse.c
index eb0362f49..41055791e 100644
--- a/src/or/confparse.c
+++ b/src/or/confparse.c
@@ -1126,20 +1126,36 @@ static struct unit_table_t memory_units[] = {
{ "kbytes", 1<<10 },
{ "kilobyte", 1<<10 },
{ "kilobytes", 1<<10 },
+ { "kilobits", 1<<7 },
+ { "kilobit", 1<<7 },
+ { "kbits", 1<<7 },
+ { "kbit", 1<<7 },
{ "m", 1<<20 },
{ "mb", 1<<20 },
{ "mbyte", 1<<20 },
{ "mbytes", 1<<20 },
{ "megabyte", 1<<20 },
{ "megabytes", 1<<20 },
+ { "megabits", 1<<17 },
+ { "megabit", 1<<17 },
+ { "mbits", 1<<17 },
+ { "mbit", 1<<17 },
{ "gb", 1<<30 },
{ "gbyte", 1<<30 },
{ "gbytes", 1<<30 },
{ "gigabyte", 1<<30 },
{ "gigabytes", 1<<30 },
+ { "gigabits", 1<<27 },
+ { "gigabit", 1<<27 },
+ { "gbits", 1<<27 },
+ { "gbit", 1<<27 },
{ "tb", U64_LITERAL(1)<<40 },
{ "terabyte", U64_LITERAL(1)<<40 },
{ "terabytes", U64_LITERAL(1)<<40 },
+ { "terabits", U64_LITERAL(1)<<37 },
+ { "terabit", U64_LITERAL(1)<<37 },
+ { "tbits", U64_LITERAL(1)<<37 },
+ { "tbit", U64_LITERAL(1)<<37 },
{ NULL, 0 },
};
diff --git a/src/or/confparse.h b/src/or/confparse.h
index d82e1096c..924ee0d94 100644
--- a/src/or/confparse.h
+++ b/src/or/confparse.h
@@ -76,7 +76,7 @@ typedef int (*validate_fn_t)(void*,void*,int,char**);
/** Information on the keys, value types, key-to-struct-member mappings,
* variable descriptions, validation functions, and abbreviations for a
* configuration or storage format. */
-typedef struct {
+typedef struct config_format_t {
size_t size; /**< Size of the struct that everything gets parsed into. */
uint32_t magic; /**< Required 'magic value' to make sure we have a struct
* of the right type. */
diff --git a/src/or/connection.c b/src/or/connection.c
index aa3cc330d..8c66a170e 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -10,6 +10,7 @@
* on connections.
**/
+#define CONNECTION_PRIVATE
#include "or.h"
#include "buffers.h"
/*
@@ -33,6 +34,7 @@
#include "dns.h"
#include "dnsserv.h"
#include "entrynodes.h"
+#include "ext_orport.h"
#include "geoip.h"
#include "main.h"
#include "policies.h"
@@ -98,6 +100,7 @@ static smartlist_t *outgoing_addrs = NULL;
#define CASE_ANY_LISTENER_TYPE \
case CONN_TYPE_OR_LISTENER: \
+ case CONN_TYPE_EXT_OR_LISTENER: \
case CONN_TYPE_AP_LISTENER: \
case CONN_TYPE_DIR_LISTENER: \
case CONN_TYPE_CONTROL_LISTENER: \
@@ -129,6 +132,8 @@ conn_type_to_string(int type)
case CONN_TYPE_CPUWORKER: return "CPU worker";
case CONN_TYPE_CONTROL_LISTENER: return "Control listener";
case CONN_TYPE_CONTROL: return "Control";
+ case CONN_TYPE_EXT_OR: return "Extended OR";
+ case CONN_TYPE_EXT_OR_LISTENER: return "Extended OR listener";
default:
log_warn(LD_BUG, "unknown connection type %d", type);
tor_snprintf(buf, sizeof(buf), "unknown [%d]", type);
@@ -165,6 +170,18 @@ conn_state_to_string(int type, int state)
case OR_CONN_STATE_OPEN: return "open";
}
break;
+ case CONN_TYPE_EXT_OR:
+ switch (state) {
+ case EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE:
+ return "waiting for authentication type";
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE:
+ return "waiting for client nonce";
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH:
+ return "waiting for client hash";
+ case EXT_OR_CONN_STATE_OPEN: return "open";
+ case EXT_OR_CONN_STATE_FLUSHING: return "flushing final OKAY";
+ }
+ break;
case CONN_TYPE_EXIT:
switch (state) {
case EXIT_CONN_STATE_RESOLVING: return "waiting for dest info";
@@ -229,6 +246,7 @@ connection_type_uses_bufferevent(connection_t *conn)
case CONN_TYPE_DIR:
case CONN_TYPE_CONTROL:
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
case CONN_TYPE_CPUWORKER:
return 1;
default:
@@ -259,14 +277,18 @@ dir_connection_new(int socket_family)
* Set active_circuit_pqueue_last_recalibrated to current cell_ewma tick.
*/
or_connection_t *
-or_connection_new(int socket_family)
+or_connection_new(int type, int socket_family)
{
or_connection_t *or_conn = tor_malloc_zero(sizeof(or_connection_t));
time_t now = time(NULL);
- connection_init(now, TO_CONN(or_conn), CONN_TYPE_OR, socket_family);
+ tor_assert(type == CONN_TYPE_OR || type == CONN_TYPE_EXT_OR);
+ connection_init(now, TO_CONN(or_conn), type, socket_family);
or_conn->timestamp_last_added_nonpadding = time(NULL);
+ if (type == CONN_TYPE_EXT_OR)
+ connection_or_set_ext_or_identifier(or_conn);
+
return or_conn;
}
@@ -335,7 +357,8 @@ connection_new(int type, int socket_family)
{
switch (type) {
case CONN_TYPE_OR:
- return TO_CONN(or_connection_new(socket_family));
+ case CONN_TYPE_EXT_OR:
+ return TO_CONN(or_connection_new(type, socket_family));
case CONN_TYPE_EXIT:
return TO_CONN(edge_connection_new(type, socket_family));
@@ -377,6 +400,7 @@ connection_init(time_t now, connection_t *conn, int type, int socket_family)
switch (type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
conn->magic = OR_CONNECTION_MAGIC;
break;
case CONN_TYPE_EXIT:
@@ -435,7 +459,7 @@ connection_link_connections(connection_t *conn_a, connection_t *conn_b)
* necessary, close its socket if necessary, and mark the directory as dirty
* if <b>conn</b> is an OR or OP connection.
*/
-static void
+STATIC void
connection_free_(connection_t *conn)
{
void *mem;
@@ -445,6 +469,7 @@ connection_free_(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
tor_assert(conn->magic == OR_CONNECTION_MAGIC);
mem = TO_OR_CONN(conn);
memlen = sizeof(or_connection_t);
@@ -575,6 +600,13 @@ connection_free_(connection_t *conn)
log_warn(LD_BUG, "called on OR conn with non-zeroed identity_digest");
connection_or_remove_from_identity_map(TO_OR_CONN(conn));
}
+ if (conn->type == CONN_TYPE_OR || conn->type == CONN_TYPE_EXT_OR) {
+ connection_or_remove_from_ext_or_id_map(TO_OR_CONN(conn));
+ tor_free(TO_OR_CONN(conn)->ext_or_conn_id);
+ tor_free(TO_OR_CONN(conn)->ext_or_auth_correct_client_hash);
+ tor_free(TO_OR_CONN(conn)->ext_or_transport);
+ }
+
#ifdef USE_BUFFEREVENTS
if (conn->type == CONN_TYPE_OR && TO_OR_CONN(conn)->bucket_cfg) {
ev_token_bucket_cfg_free(TO_OR_CONN(conn)->bucket_cfg);
@@ -638,6 +670,7 @@ connection_about_to_close_connection(connection_t *conn)
connection_dir_about_to_close(TO_DIR_CONN(conn));
break;
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
connection_or_about_to_close(TO_OR_CONN(conn));
break;
case CONN_TYPE_AP:
@@ -877,8 +910,11 @@ check_location_for_unix_socket(const or_options_t *options, const char *path)
int r = -1;
char *p = tor_strdup(path);
cpd_check_t flags = CPD_CHECK_MODE_ONLY;
- if (get_parent_directory(p)<0)
+ if (get_parent_directory(p)<0 || p[0] != '/') {
+ log_warn(LD_GENERAL, "Bad unix socket address '%s'. Tor does not support "
+ "relative paths for unix sockets.", path);
goto done;
+ }
if (options->ControlSocketsGroupWritable)
flags |= CPD_GROUP_OK;
@@ -967,7 +1003,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
log_notice(LD_NET, "Opening %s on %s",
conn_type_to_string(type), fmt_addrport(&addr, usePort));
- s = tor_open_socket(tor_addr_family(&addr),
+ s = tor_open_socket_nonblocking(tor_addr_family(&addr),
is_tcp ? SOCK_STREAM : SOCK_DGRAM,
is_tcp ? IPPROTO_TCP: IPPROTO_UDP);
if (!SOCKET_OK(s)) {
@@ -1051,7 +1087,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
strerror(errno));
goto err;
}
- s = tor_open_socket(AF_UNIX, SOCK_STREAM, 0);
+ s = tor_open_socket_nonblocking(AF_UNIX, SOCK_STREAM, 0);
if (! SOCKET_OK(s)) {
log_warn(LD_NET,"Socket creation failed: %s.", strerror(errno));
goto err;
@@ -1099,9 +1135,6 @@ connection_listener_new(const struct sockaddr *listensockaddr,
tor_assert(0);
}
- if (set_socket_nonblocking(s) == -1)
- goto err;
-
lis_conn = listener_connection_new(type, listensockaddr->sa_family);
conn = TO_CONN(lis_conn);
conn->socket_family = listensockaddr->sa_family;
@@ -1249,7 +1282,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
tor_assert((size_t)remotelen >= sizeof(struct sockaddr_in));
memset(&addrbuf, 0, sizeof(addrbuf));
- news = tor_accept_socket(conn->s,remote,&remotelen);
+ news = tor_accept_socket_nonblocking(conn->s,remote,&remotelen);
if (!SOCKET_OK(news)) { /* accept() error */
int e = tor_socket_errno(conn->s);
if (ERRNO_IS_ACCEPT_EAGAIN(e)) {
@@ -1269,10 +1302,6 @@ connection_handle_listener_read(connection_t *conn, int new_type)
(int)news,(int)conn->s);
make_socket_reuseable(news);
- if (set_socket_nonblocking(news) == -1) {
- tor_close_socket(news);
- return 0;
- }
if (options->ConstrainedSockets)
set_constrained_socket_buffers(news, (int)options->ConstrainedSockSize);
@@ -1371,6 +1400,9 @@ connection_init_accepted_conn(connection_t *conn,
connection_start_reading(conn);
switch (conn->type) {
+ case CONN_TYPE_EXT_OR:
+ /* Initiate Extended ORPort authentication. */
+ return connection_ext_or_start_auth(TO_OR_CONN(conn));
case CONN_TYPE_OR:
control_event_or_conn_status(TO_OR_CONN(conn), OR_CONN_EVENT_NEW, 0);
rv = connection_tls_start_handshake(TO_OR_CONN(conn), 1);
@@ -1464,7 +1496,7 @@ connection_connect(connection_t *conn, const char *address,
return -1;
}
- s = tor_open_socket(protocol_family,SOCK_STREAM,IPPROTO_TCP);
+ s = tor_open_socket_nonblocking(protocol_family,SOCK_STREAM,IPPROTO_TCP);
if (! SOCKET_OK(s)) {
*socket_error = tor_socket_errno(-1);
log_warn(LD_NET,"Error creating network socket: %s",
@@ -1506,12 +1538,6 @@ connection_connect(connection_t *conn, const char *address,
}
}
- if (set_socket_nonblocking(s) == -1) {
- *socket_error = tor_socket_errno(s);
- tor_close_socket(s);
- return -1;
- }
-
if (options->ConstrainedSockets)
set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);
@@ -2883,6 +2909,8 @@ connection_handle_read_impl(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_OR_LISTENER:
return connection_handle_listener_read(conn, CONN_TYPE_OR);
+ case CONN_TYPE_EXT_OR_LISTENER:
+ return connection_handle_listener_read(conn, CONN_TYPE_EXT_OR);
case CONN_TYPE_AP_LISTENER:
case CONN_TYPE_AP_TRANS_LISTENER:
case CONN_TYPE_AP_NATD_LISTENER:
@@ -3673,9 +3701,9 @@ connection_flush(connection_t *conn)
* it all, so we don't end up with many megabytes of controller info queued at
* once.
*/
-void
-connection_write_to_buf_impl_(const char *string, size_t len,
- connection_t *conn, int zlib)
+MOCK_IMPL(void,
+connection_write_to_buf_impl_,(const char *string, size_t len,
+ connection_t *conn, int zlib))
{
/* XXXX This function really needs to return -1 on failure. */
int r;
@@ -3915,6 +3943,7 @@ int
connection_is_listener(connection_t *conn)
{
if (conn->type == CONN_TYPE_OR_LISTENER ||
+ conn->type == CONN_TYPE_EXT_OR_LISTENER ||
conn->type == CONN_TYPE_AP_LISTENER ||
conn->type == CONN_TYPE_AP_TRANS_LISTENER ||
conn->type == CONN_TYPE_AP_DNS_LISTENER ||
@@ -3937,6 +3966,7 @@ connection_state_is_open(connection_t *conn)
return 0;
if ((conn->type == CONN_TYPE_OR && conn->state == OR_CONN_STATE_OPEN) ||
+ (conn->type == CONN_TYPE_EXT_OR) ||
(conn->type == CONN_TYPE_AP && conn->state == AP_CONN_STATE_OPEN) ||
(conn->type == CONN_TYPE_EXIT && conn->state == EXIT_CONN_STATE_OPEN) ||
(conn->type == CONN_TYPE_CONTROL &&
@@ -4106,6 +4136,8 @@ connection_process_inbuf(connection_t *conn, int package_partial)
switch (conn->type) {
case CONN_TYPE_OR:
return connection_or_process_inbuf(TO_OR_CONN(conn));
+ case CONN_TYPE_EXT_OR:
+ return connection_ext_or_process_inbuf(TO_OR_CONN(conn));
case CONN_TYPE_EXIT:
case CONN_TYPE_AP:
return connection_edge_process_inbuf(TO_EDGE_CONN(conn),
@@ -4166,6 +4198,8 @@ connection_finished_flushing(connection_t *conn)
switch (conn->type) {
case CONN_TYPE_OR:
return connection_or_finished_flushing(TO_OR_CONN(conn));
+ case CONN_TYPE_EXT_OR:
+ return connection_ext_or_finished_flushing(TO_OR_CONN(conn));
case CONN_TYPE_AP:
case CONN_TYPE_EXIT:
return connection_edge_finished_flushing(TO_EDGE_CONN(conn));
@@ -4221,6 +4255,7 @@ connection_reached_eof(connection_t *conn)
{
switch (conn->type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
return connection_or_reached_eof(TO_OR_CONN(conn));
case CONN_TYPE_AP:
case CONN_TYPE_EXIT:
@@ -4307,6 +4342,7 @@ assert_connection_ok(connection_t *conn, time_t now)
switch (conn->type) {
case CONN_TYPE_OR:
+ case CONN_TYPE_EXT_OR:
tor_assert(conn->magic == OR_CONNECTION_MAGIC);
break;
case CONN_TYPE_AP:
@@ -4412,6 +4448,10 @@ assert_connection_ok(connection_t *conn, time_t now)
tor_assert(conn->state >= OR_CONN_STATE_MIN_);
tor_assert(conn->state <= OR_CONN_STATE_MAX_);
break;
+ case CONN_TYPE_EXT_OR:
+ tor_assert(conn->state >= EXT_OR_CONN_STATE_MIN_);
+ tor_assert(conn->state <= EXT_OR_CONN_STATE_MAX_);
+ break;
case CONN_TYPE_EXIT:
tor_assert(conn->state >= EXIT_CONN_STATE_MIN_);
tor_assert(conn->state <= EXIT_CONN_STATE_MAX_);
@@ -4544,6 +4584,7 @@ connection_free_all(void)
/* Unlink everything from the identity map. */
connection_or_clear_identity_map();
+ connection_or_clear_ext_or_id_map();
/* Clear out our list of broken connections */
clear_broken_connection_map(0);
diff --git a/src/or/connection.h b/src/or/connection.h
index 3e656ec06..0454ac2f3 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -19,7 +19,7 @@ const char *conn_type_to_string(int type);
const char *conn_state_to_string(int type, int state);
dir_connection_t *dir_connection_new(int socket_family);
-or_connection_t *or_connection_new(int socket_family);
+or_connection_t *or_connection_new(int type, int socket_family);
edge_connection_t *edge_connection_new(int type, int socket_family);
entry_connection_t *entry_connection_new(int type, int socket_family);
control_connection_t *control_connection_new(int socket_family);
@@ -130,8 +130,8 @@ int connection_outbuf_too_full(connection_t *conn);
int connection_handle_write(connection_t *conn, int force);
int connection_flush(connection_t *conn);
-void connection_write_to_buf_impl_(const char *string, size_t len,
- connection_t *conn, int zlib);
+MOCK_DECL(void, connection_write_to_buf_impl_,
+ (const char *string, size_t len, connection_t *conn, int zlib));
/* DOCDOC connection_write_to_buf */
static void connection_write_to_buf(const char *string, size_t len,
connection_t *conn);
@@ -214,5 +214,9 @@ void connection_enable_rate_limiting(connection_t *conn);
#define connection_type_uses_bufferevent(c) (0)
#endif
+#ifdef CONNECTION_PRIVATE
+STATIC void connection_free_(connection_t *conn);
+#endif
+
#endif
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index bb7ffb9a4..33585a094 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -407,7 +407,7 @@ connection_edge_finished_flushing(edge_connection_t *conn)
* that the name resolution that led us to <b>addr</b> will be valid for
* <b>ttl</b> seconds. Return -1 on error, or the number of bytes used on
* success. */
-/* private */int
+STATIC int
connected_cell_format_payload(uint8_t *payload_out,
const tor_addr_t *addr,
uint32_t ttl)
@@ -2265,7 +2265,7 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
* Return -1 in the case where want to send a RELAY_END cell, and < -1 when
* we don't.
**/
-/* static */ int
+STATIC int
begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
uint8_t *end_reason_out)
{
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index ea284cbcf..e3a95ad9e 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -12,6 +12,8 @@
#ifndef TOR_CONNECTION_EDGE_H
#define TOR_CONNECTION_EDGE_H
+#include "testsupport.h"
+
#define connection_mark_unattached_ap(conn, endreason) \
connection_mark_unattached_ap_((conn), (endreason), __LINE__, SHORT_FILE__)
@@ -130,9 +132,9 @@ typedef struct begin_cell_t {
unsigned is_begindir : 1;
} begin_cell_t;
-int begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
+STATIC int begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
uint8_t *end_reason_out);
-int connected_cell_format_payload(uint8_t *payload_out,
+STATIC int connected_cell_format_payload(uint8_t *payload_out,
const tor_addr_t *addr,
uint32_t ttl);
#endif
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 361636350..31fd6d673 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -37,7 +37,7 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
-
+#include "ext_orport.h"
#ifdef USE_BUFFEREVENTS
#include <event2/bufferevent_ssl.h>
#endif
@@ -75,6 +75,10 @@ static void connection_or_handle_event_cb(struct bufferevent *bufev,
* they form a linked list, with next_with_same_id as the next pointer. */
static digestmap_t *orconn_identity_map = NULL;
+/** Global map between Extended ORPort identifiers and OR
+ * connections. */
+static digestmap_t *orconn_ext_or_id_map = NULL;
+
/** If conn is listed in orconn_identity_map, remove it, and clear
* conn->identity_digest. Otherwise do nothing. */
void
@@ -174,6 +178,71 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
#endif
}
+/** Remove the Extended ORPort identifier of <b>conn</b> from the
+ * global identifier list. Also, clear the identifier from the
+ * connection itself. */
+void
+connection_or_remove_from_ext_or_id_map(or_connection_t *conn)
+{
+ or_connection_t *tmp;
+ if (!orconn_ext_or_id_map)
+ return;
+ if (!conn->ext_or_conn_id)
+ return;
+
+ tmp = digestmap_remove(orconn_ext_or_id_map, conn->ext_or_conn_id);
+ if (!tor_digest_is_zero(conn->ext_or_conn_id))
+ tor_assert(tmp == conn);
+
+ memset(conn->ext_or_conn_id, 0, EXT_OR_CONN_ID_LEN);
+}
+
+/** Return the connection whose ext_or_id is <b>id</b>. Return NULL if no such
+ * connection is found. */
+or_connection_t *
+connection_or_get_by_ext_or_id(const char *id)
+{
+ if (!orconn_ext_or_id_map)
+ return NULL;
+ return digestmap_get(orconn_ext_or_id_map, id);
+}
+
+/** Deallocate the global Extended ORPort identifier list */
+void
+connection_or_clear_ext_or_id_map(void)
+{
+ digestmap_free(orconn_ext_or_id_map, NULL);
+ orconn_ext_or_id_map = NULL;
+}
+
+/** Creates an Extended ORPort identifier for <b>conn<b/> and deposits
+ * it into the global list of identifiers. */
+void
+connection_or_set_ext_or_identifier(or_connection_t *conn)
+{
+ char random_id[EXT_OR_CONN_ID_LEN];
+ or_connection_t *tmp;
+
+ if (!orconn_ext_or_id_map)
+ orconn_ext_or_id_map = digestmap_new();
+
+ /* Remove any previous identifiers: */
+ if (conn->ext_or_conn_id && !tor_digest_is_zero(conn->ext_or_conn_id))
+ connection_or_remove_from_ext_or_id_map(conn);
+
+ do {
+ crypto_rand(random_id, sizeof(random_id));
+ } while (digestmap_get(orconn_ext_or_id_map, random_id));
+
+ if (!conn->ext_or_conn_id)
+ conn->ext_or_conn_id = tor_malloc_zero(EXT_OR_CONN_ID_LEN);
+
+ memcpy(conn->ext_or_conn_id, random_id, EXT_OR_CONN_ID_LEN);
+
+ tmp = digestmap_set(orconn_ext_or_id_map, random_id, conn);
+ tor_assert(!tmp);
+}
+
/**************************************************************/
/** Map from a string describing what a non-open OR connection was doing when
@@ -228,7 +297,7 @@ connection_or_get_state_description(or_connection_t *orconn,
const char *conn_state;
char tls_state[256];
- tor_assert(conn->type == CONN_TYPE_OR);
+ tor_assert(conn->type == CONN_TYPE_OR || conn->type == CONN_TYPE_EXT_OR);
conn_state = conn_state_to_string(conn->type, conn->state);
tor_tls_get_state_description(orconn->tls, tls_state, sizeof(tls_state));
@@ -1077,7 +1146,7 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
return NULL;
}
- conn = or_connection_new(tor_addr_family(&addr));
+ conn = or_connection_new(CONN_TYPE_OR, tor_addr_family(&addr));
/*
* Set up conn so it's got all the data we need to remember for channels
@@ -1212,8 +1281,8 @@ connection_or_close_for_error(or_connection_t *orconn, int flush)
*
* Return -1 if <b>conn</b> is broken, else return 0.
*/
-int
-connection_tls_start_handshake(or_connection_t *conn, int receiving)
+MOCK_IMPL(int,
+connection_tls_start_handshake,(or_connection_t *conn, int receiving))
{
channel_listener_t *chan_listener;
channel_t *chan;
@@ -1470,7 +1539,8 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
int
connection_or_nonopen_was_started_here(or_connection_t *conn)
{
- tor_assert(conn->base_.type == CONN_TYPE_OR);
+ tor_assert(conn->base_.type == CONN_TYPE_OR ||
+ conn->base_.type == CONN_TYPE_EXT_OR);
if (!conn->tls)
return 1; /* it's still in proxy states or something */
if (conn->handshake_state)
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index 85e68f1a3..8d9302893 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -45,7 +45,8 @@ void connection_or_close_for_error(or_connection_t *orconn, int flush);
void connection_or_report_broken_states(int severity, int domain);
-int connection_tls_start_handshake(or_connection_t *conn, int receiving);
+MOCK_DECL(int,connection_tls_start_handshake,(or_connection_t *conn,
+ int receiving));
int connection_tls_continue_handshake(or_connection_t *conn);
int connection_init_or_handshake_state(or_connection_t *conn,
diff --git a/src/or/control.c b/src/or/control.c
index a4c674f34..d624d2879 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -115,7 +115,7 @@ static int authentication_cookie_is_set = 0;
/** If authentication_cookie_is_set, a secret cookie that we've stored to disk
* and which we're using to authenticate controllers. (If the controller can
* read it off disk, it has permission to connect.) */
-static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
+static uint8_t *authentication_cookie = NULL;
#define SAFECOOKIE_SERVER_TO_CONTROLLER_CONSTANT \
"Tor safe cookie authentication server-to-controller hash"
@@ -334,7 +334,7 @@ connection_write_str_to_buf(const char *s, control_connection_t *conn)
* the end. Replace all LF characters sequences with CRLF. Return the number
* of bytes in *<b>out</b>.
*/
-/* static */ size_t
+STATIC size_t
write_escaped_data(const char *data, size_t len, char **out)
{
size_t sz_out = len+8;
@@ -382,7 +382,7 @@ write_escaped_data(const char *data, size_t len, char **out)
* that appears at the start of a line, and replacing all CRLF sequences
* with LF. Return the number of
* bytes in *<b>out</b>. */
-/* static */ size_t
+STATIC size_t
read_escaped_data(const char *data, size_t len, char **out)
{
char *outp;
@@ -4446,44 +4446,27 @@ get_cookie_file(void)
}
}
-/** Choose a random authentication cookie and write it to disk.
- * Anybody who can read the cookie from disk will be considered
- * authorized to use the control connection. Return -1 if we can't
- * write the file, or 0 on success. */
+/* Initialize the cookie-based authentication system of the
+ * ControlPort. If <b>enabled</b> is 0, then disable the cookie
+ * authentication system. */
int
-init_cookie_authentication(int enabled)
+init_control_cookie_authentication(int enabled)
{
- char *fname;
+ char *fname = NULL;
+ int retval;
+
if (!enabled) {
authentication_cookie_is_set = 0;
return 0;
}
- /* We don't want to generate a new cookie every time we call
- * options_act(). One should be enough. */
- if (authentication_cookie_is_set)
- return 0; /* all set */
-
fname = get_cookie_file();
- crypto_rand(authentication_cookie, AUTHENTICATION_COOKIE_LEN);
- authentication_cookie_is_set = 1;
- if (write_bytes_to_file(fname, authentication_cookie,
- AUTHENTICATION_COOKIE_LEN, 1)) {
- log_warn(LD_FS,"Error writing authentication cookie to %s.",
- escaped(fname));
- tor_free(fname);
- return -1;
- }
-#ifndef _WIN32
- if (get_options()->CookieAuthFileGroupReadable) {
- if (chmod(fname, 0640)) {
- log_warn(LD_FS,"Unable to make %s group-readable.", escaped(fname));
- }
- }
-#endif
-
+ retval = init_cookie_authentication(fname, "", /* no header */
+ AUTHENTICATION_COOKIE_LEN,
+ &authentication_cookie,
+ &authentication_cookie_is_set);
tor_free(fname);
- return 0;
+ return retval;
}
/** A copy of the process specifier of Tor's owning controller, or
@@ -4699,8 +4682,8 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
* that indicates a problem. <b>warn</b> gives a hint as to why, and
* <b>reason</b> provides an "or_conn_end_reason" tag.
*/
-void
-control_event_bootstrap_problem(const char *warn, int reason)
+MOCK_IMPL(void,
+control_event_bootstrap_problem, (const char *warn, int reason))
{
int status = bootstrap_percent;
const char *tag, *summary;
@@ -4767,3 +4750,11 @@ control_event_clients_seen(const char *controller_str)
"650 CLIENTS_SEEN %s\r\n", controller_str);
}
+/** Free any leftover allocated memory of the control.c subsystem. */
+void
+control_free_all(void)
+{
+ if (authentication_cookie) /* Free the auth cookie */
+ tor_free(authentication_cookie);
+}
+
diff --git a/src/or/control.h b/src/or/control.h
index 61062da2c..be9476ea3 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -77,7 +77,7 @@ int control_event_buildtimeout_set(const circuit_build_times_t *cbt,
buildtimeout_set_event_t type);
int control_event_signal(uintptr_t signal);
-int init_cookie_authentication(int enabled);
+int init_control_cookie_authentication(int enabled);
smartlist_t *decode_hashed_passwords(config_line_t *passwords);
void disable_control_logging(void);
void enable_control_logging(void);
@@ -85,14 +85,16 @@ void enable_control_logging(void);
void monitor_owning_controller_process(const char *process_spec);
void control_event_bootstrap(bootstrap_status_t status, int progress);
-void control_event_bootstrap_problem(const char *warn, int reason);
+MOCK_DECL(void, control_event_bootstrap_problem,(const char *warn,
+ int reason));
void control_event_clients_seen(const char *controller_str);
+void control_free_all(void);
#ifdef CONTROL_PRIVATE
/* Used only by control.c and test.c */
-size_t write_escaped_data(const char *data, size_t len, char **out);
-size_t read_escaped_data(const char *data, size_t len, char **out);
+STATIC size_t write_escaped_data(const char *data, size_t len, char **out);
+STATIC size_t read_escaped_data(const char *data, size_t len, char **out);
#endif
#endif
diff --git a/src/or/directory.c b/src/or/directory.c
index 88d671779..97305ae2a 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -2966,7 +2966,9 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
tor_addr_t addr;
if (tor_inet_aton((TO_CONN(conn))->address, &in)) {
tor_addr_from_ipv4h(&addr, ntohl(in.s_addr));
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, time(NULL));
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS,
+ &addr, NULL,
+ time(NULL));
geoip_note_ns_response(GEOIP_SUCCESS);
/* Note that a request for a network status has started, so that we
* can measure the download time later on. */
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 97fe06884..3243ac47c 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -2082,7 +2082,7 @@ static digestmap_t *mbw_cache = NULL;
/** Store a measured bandwidth cache entry when reading the measured
* bandwidths file. */
-void
+STATIC void
dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
time_t as_of)
{
@@ -2112,7 +2112,7 @@ dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
}
/** Clear and free the measured bandwidth cache */
-void
+STATIC void
dirserv_clear_measured_bw_cache(void)
{
if (mbw_cache) {
@@ -2123,7 +2123,7 @@ dirserv_clear_measured_bw_cache(void)
}
/** Scan the measured bandwidth cache and remove expired entries */
-void
+STATIC void
dirserv_expire_measured_bw_cache(time_t now)
{
@@ -2145,7 +2145,7 @@ dirserv_expire_measured_bw_cache(time_t now)
}
/** Get the current size of the measured bandwidth cache */
-int
+STATIC int
dirserv_get_measured_bw_cache_size(void)
{
if (mbw_cache) return digestmap_size(mbw_cache);
@@ -2155,7 +2155,7 @@ dirserv_get_measured_bw_cache_size(void)
/** Query the cache by identity digest, return value indicates whether
* we found it. The bw_out and as_of_out pointers receive the cached
* bandwidth value and the time it was cached if not NULL. */
-int
+STATIC int
dirserv_query_measured_bw_cache_kb(const char *node_id, long *bw_kb_out,
time_t *as_of_out)
{
@@ -2176,7 +2176,7 @@ dirserv_query_measured_bw_cache_kb(const char *node_id, long *bw_kb_out,
}
/** Predicate wrapper for dirserv_query_measured_bw_cache() */
-int
+STATIC int
dirserv_has_measured_bw(const char *node_id)
{
return dirserv_query_measured_bw_cache_kb(node_id, NULL, NULL);
@@ -2754,7 +2754,7 @@ clear_status_flags_on_sybil(routerstatus_t *rs)
* into a measured_bw_line_t output structure. Returns -1 on failure
* or 0 on success.
*/
-int
+STATIC int
measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
{
char *line = tor_strdup(orig_line);
@@ -2835,7 +2835,7 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
* of bandwidth statuses. Returns true if a line is found,
* false otherwise.
*/
-int
+STATIC int
measured_bw_line_apply(measured_bw_line_t *parsed_line,
smartlist_t *routerstatuses)
{
@@ -3168,7 +3168,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
/** For v2 authoritative directories only: Replace the contents of
* <b>the_v2_networkstatus</b> with a newly generated network status
* object. */
-cached_dir_t *
+STATIC cached_dir_t *
generate_v2_networkstatus_opinion(void)
{
cached_dir_t *r = NULL;
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index f9d36d760..7221fc995 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -12,6 +12,8 @@
#ifndef TOR_DIRSERV_H
#define TOR_DIRSERV_H
+#include "testsupport.h"
+
/** What fraction (1 over this number) of the relay ID space do we
* (as a directory authority) launch connections to at each reachability
* test? */
@@ -119,20 +121,21 @@ cached_dir_t *new_cached_dir(char *s, time_t published);
/* Put the MAX_MEASUREMENT_AGE #define here so unit tests can see it */
#define MAX_MEASUREMENT_AGE (3*24*60*60) /* 3 days */
-int measured_bw_line_parse(measured_bw_line_t *out, const char *line);
+STATIC int measured_bw_line_parse(measured_bw_line_t *out, const char *line);
-int measured_bw_line_apply(measured_bw_line_t *parsed_line,
+STATIC int measured_bw_line_apply(measured_bw_line_t *parsed_line,
smartlist_t *routerstatuses);
-void dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
+STATIC void dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
time_t as_of);
-void dirserv_clear_measured_bw_cache(void);
-void dirserv_expire_measured_bw_cache(time_t now);
-int dirserv_get_measured_bw_cache_size(void);
-int dirserv_query_measured_bw_cache_kb(const char *node_id, long *bw_out,
- time_t *as_of_out);
-int dirserv_has_measured_bw(const char *node_id);
-cached_dir_t *generate_v2_networkstatus_opinion(void);
+STATIC void dirserv_clear_measured_bw_cache(void);
+STATIC void dirserv_expire_measured_bw_cache(time_t now);
+STATIC int dirserv_get_measured_bw_cache_size(void);
+STATIC int dirserv_query_measured_bw_cache_kb(const char *node_id,
+ long *bw_out,
+ time_t *as_of_out);
+STATIC int dirserv_has_measured_bw(const char *node_id);
+STATIC cached_dir_t *generate_v2_networkstatus_opinion(void);
#endif
int dirserv_read_measured_bandwidths(const char *from_file,
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 4f0ab6833..12ceba854 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -60,7 +60,7 @@ static char *make_consensus_method_list(int low, int high, const char *sep);
/** Return a new string containing the string representation of the vote in
* <b>v3_ns</b>, signed with our v3 signing key <b>private_signing_key</b>.
* For v3 authorities. */
-char *
+STATIC char *
format_networkstatus_vote(crypto_pk_t *private_signing_key,
networkstatus_t *v3_ns)
{
@@ -587,7 +587,7 @@ compute_consensus_versions_list(smartlist_t *lst, int n_versioning)
/** Helper: given a list of valid networkstatus_t, return a new string
* containing the contents of the consensus network parameter set.
*/
-/* private */ char *
+STATIC char *
dirvote_compute_params(smartlist_t *votes, int method, int total_authorities)
{
int i;
@@ -1590,10 +1590,19 @@ networkstatus_compute_consensus(smartlist_t *votes,
unnamed_flag[i] = named_flag[i] = -1;
chosen_named_idx = smartlist_string_pos(flags, "Named");
- /* Build the flag index. */
+ /* Build the flag indexes. Note that no vote can have more than 64 members
+ * for known_flags, so no value will be greater than 63, so it's safe to
+ * do U64_LITERAL(1) << index on these values. But note also that
+ * named_flag and unnamed_flag are initialized to -1, so we need to check
+ * that they're actually set before doing U64_LITERAL(1) << index with
+ * them.*/
SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) {
flag_map[v_sl_idx] = tor_malloc_zero(
sizeof(int)*smartlist_len(v->known_flags));
+ if (smartlist_len(v->known_flags) > MAX_KNOWN_FLAGS_IN_VOTE) {
+ log_warn(LD_BUG, "Somehow, a vote has %d entries in known_flags",
+ smartlist_len(v->known_flags));
+ }
SMARTLIST_FOREACH_BEGIN(v->known_flags, const char *, fl) {
int p = smartlist_string_pos(flags, fl);
tor_assert(p >= 0);
@@ -1727,7 +1736,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
if (rs->flags & (U64_LITERAL(1) << i))
++flag_counts[flag_map[v_sl_idx][i]];
}
- if (rs->flags & (U64_LITERAL(1) << named_flag[v_sl_idx])) {
+ if (named_flag[v_sl_idx] >= 0 &&
+ (rs->flags & (U64_LITERAL(1) << named_flag[v_sl_idx]))) {
if (chosen_name && strcmp(chosen_name, rs->status.nickname)) {
log_notice(LD_DIR, "Conflict on naming for router: %s vs %s",
chosen_name, rs->status.nickname);
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index a3e6cc0d6..3a4951a95 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -12,6 +12,8 @@
#ifndef TOR_DIRVOTE_H
#define TOR_DIRVOTE_H
+#include "testsupport.h"
+
/** Lowest allowable value for VoteSeconds. */
#define MIN_VOTE_SECONDS 2
/** Lowest allowable value for DistSeconds. */
@@ -136,9 +138,9 @@ document_signature_t *voter_get_sig_by_algorithm(
digest_algorithm_t alg);
#ifdef DIRVOTE_PRIVATE
-char *format_networkstatus_vote(crypto_pk_t *private_key,
+STATIC char *format_networkstatus_vote(crypto_pk_t *private_key,
networkstatus_t *v3_ns);
-char *dirvote_compute_params(smartlist_t *votes, int method,
+STATIC char *dirvote_compute_params(smartlist_t *votes, int method,
int total_authorities);
#endif
diff --git a/src/or/dns.c b/src/or/dns.c
index edcf92e5b..f2b7eecc3 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -437,8 +437,8 @@ cached_resolve_add_answer(cached_resolve_t *resolve,
if (resolve->res_status_ipv4 != RES_STATUS_INFLIGHT)
return;
- if (dns_result == DNS_ERR_NONE && answer_addr) {
- tor_assert(tor_addr_family(answer_addr) == AF_INET);
+ if (dns_result == DNS_ERR_NONE && answer_addr &&
+ tor_addr_family(answer_addr) == AF_INET) {
resolve->result_ipv4.addr_ipv4 = tor_addr_to_ipv4h(answer_addr);
resolve->res_status_ipv4 = RES_STATUS_DONE_OK;
} else {
@@ -450,8 +450,8 @@ cached_resolve_add_answer(cached_resolve_t *resolve,
if (resolve->res_status_ipv6 != RES_STATUS_INFLIGHT)
return;
- if (dns_result == DNS_ERR_NONE && answer_addr) {
- tor_assert(tor_addr_family(answer_addr) == AF_INET6);
+ if (dns_result == DNS_ERR_NONE && answer_addr &&
+ tor_addr_family(answer_addr) == AF_INET6) {
memcpy(&resolve->result_ipv6.addr_ipv6,
tor_addr_to_in6(answer_addr),
sizeof(struct in6_addr));
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index 70f7c878e..cadc70ec7 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -419,14 +419,24 @@ add_an_entry_guard(const node_t *chosen, int reset_status, int prepend,
return node;
}
+/** Choose how many entry guards or directory guards we'll use. If
+ * <b>for_directory</b> is true, we return how many directory guards to
+ * use; else we return how many entry guards to use. */
+static int
+decide_num_guards(const or_options_t *options, int for_directory)
+{
+ if (for_directory && options->NumDirectoryGuards != 0)
+ return options->NumDirectoryGuards;
+ return options->NumEntryGuards;
+}
+
/** If the use of entry guards is configured, choose more entry guards
* until we have enough in the list. */
static void
pick_entry_guards(const or_options_t *options, int for_directory)
{
int changed = 0;
- const int num_needed = for_directory ? options->NumDirectoryGuards :
- options->NumEntryGuards;
+ const int num_needed = decide_num_guards(options, for_directory);
tor_assert(entry_guards);
@@ -966,8 +976,7 @@ choose_random_entry_impl(cpath_build_state_t *state, int for_directory,
int need_capacity = state ? state->need_capacity : 0;
int preferred_min, consider_exit_family = 0;
int need_descriptor = !for_directory;
- const int num_needed = for_directory ? options->NumDirectoryGuards :
- options->NumEntryGuards;
+ const int num_needed = decide_num_guards(options, for_directory);
if (chosen_exit) {
nodelist_add_node_and_family(exit_family, chosen_exit);
diff --git a/src/or/ext_orport.c b/src/or/ext_orport.c
new file mode 100644
index 000000000..d5a0fa1ee
--- /dev/null
+++ b/src/or/ext_orport.c
@@ -0,0 +1,648 @@
+/* Copyright (c) 2012, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file ext_orport.c
+ * \brief Code implementing the Extended ORPort.
+*/
+
+#define EXT_ORPORT_PRIVATE
+#include "or.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "ext_orport.h"
+#include "control.h"
+#include "config.h"
+#include "util.h"
+#include "main.h"
+
+/** Allocate and return a structure capable of holding an Extended
+ * ORPort message of body length <b>len</b>. */
+ext_or_cmd_t *
+ext_or_cmd_new(uint16_t len)
+{
+ size_t size = STRUCT_OFFSET(ext_or_cmd_t, body) + len;
+ ext_or_cmd_t *cmd = tor_malloc(size);
+ cmd->len = len;
+ return cmd;
+}
+
+/** Deallocate the Extended ORPort message in <b>cmd</b>. */
+void
+ext_or_cmd_free(ext_or_cmd_t *cmd)
+{
+ tor_free(cmd);
+}
+
+/** Get an Extended ORPort message from <b>conn</b>, and place it in
+ * <b>out</b>. Return -1 on fail, 0 if we need more data, and 1 if we
+ * successfully extracted an Extended ORPort command from the
+ * buffer. */
+static int
+connection_fetch_ext_or_cmd_from_buf(connection_t *conn, ext_or_cmd_t **out)
+{
+ IF_HAS_BUFFEREVENT(conn, {
+ struct evbuffer *input = bufferevent_get_input(conn->bufev);
+ return fetch_ext_or_command_from_evbuffer(input, out);
+ }) ELSE_IF_NO_BUFFEREVENT {
+ return fetch_ext_or_command_from_buf(conn->inbuf, out);
+ }
+}
+
+/** Write an Extended ORPort message to <b>conn</b>. Use
+ * <b>command</b> as the command type, <b>bodylen</b> as the body
+ * length, and <b>body</b>, if it's present, as the body of the
+ * message. */
+STATIC int
+connection_write_ext_or_command(connection_t *conn,
+ uint16_t command,
+ const char *body,
+ size_t bodylen)
+{
+ char header[4];
+ if (bodylen > UINT16_MAX)
+ return -1;
+ set_uint16(header, htons(command));
+ set_uint16(header+2, htons(bodylen));
+ connection_write_to_buf(header, 4, conn);
+ if (bodylen) {
+ tor_assert(body);
+ connection_write_to_buf(body, bodylen, conn);
+ }
+ return 0;
+}
+
+/** Transition from an Extended ORPort which accepts Extended ORPort
+ * messages, to an Extended ORport which accepts OR traffic. */
+static void
+connection_ext_or_transition(or_connection_t *conn)
+{
+ tor_assert(conn->base_.type == CONN_TYPE_EXT_OR);
+
+ conn->base_.type = CONN_TYPE_OR;
+ TO_CONN(conn)->state = 0; // set the state to a neutral value
+ control_event_or_conn_status(conn, OR_CONN_EVENT_NEW, 0);
+ connection_tls_start_handshake(conn, 1);
+}
+
+/** Length of authentication cookie. */
+#define EXT_OR_PORT_AUTH_COOKIE_LEN 32
+/** Length of the header of the cookie file. */
+#define EXT_OR_PORT_AUTH_COOKIE_HEADER_LEN 32
+/** Static cookie file header. */
+#define EXT_OR_PORT_AUTH_COOKIE_HEADER "! Extended ORPort Auth Cookie !\x0a"
+/** Length of safe-cookie protocol hashes. */
+#define EXT_OR_PORT_AUTH_HASH_LEN DIGEST256_LEN
+/** Length of safe-cookie protocol nonces. */
+#define EXT_OR_PORT_AUTH_NONCE_LEN 32
+/** Safe-cookie protocol constants. */
+#define EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST \
+ "ExtORPort authentication server-to-client hash"
+#define EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST \
+ "ExtORPort authentication client-to-server hash"
+
+/* Code to indicate cookie authentication */
+#define EXT_OR_AUTHTYPE_SAFECOOKIE 0x01
+
+/** If true, we've set ext_or_auth_cookie to a secret code and stored
+ * it to disk. */
+STATIC int ext_or_auth_cookie_is_set = 0;
+/** If ext_or_auth_cookie_is_set, a secret cookie that we've stored to disk
+ * and which we're using to authenticate controllers. (If the controller can
+ * read it off disk, it has permission to connect.) */
+STATIC uint8_t *ext_or_auth_cookie = NULL;
+
+/** Helper: Return a newly allocated string containing a path to the
+ * file where we store our authentication cookie. */
+char *
+get_ext_or_auth_cookie_file_name(void)
+{
+ const or_options_t *options = get_options();
+ if (options->ExtORPortCookieAuthFile &&
+ strlen(options->ExtORPortCookieAuthFile)) {
+ return tor_strdup(options->ExtORPortCookieAuthFile);
+ } else {
+ return get_datadir_fname("extended_orport_auth_cookie");
+ }
+}
+
+/* Initialize the cookie-based authentication system of the
+ * Extended ORPort. If <b>is_enabled</b> is 0, then disable the cookie
+ * authentication system. */
+int
+init_ext_or_cookie_authentication(int is_enabled)
+{
+ char *fname = NULL;
+ int retval;
+
+ if (!is_enabled) {
+ ext_or_auth_cookie_is_set = 0;
+ return 0;
+ }
+
+ fname = get_ext_or_auth_cookie_file_name();
+ retval = init_cookie_authentication(fname, EXT_OR_PORT_AUTH_COOKIE_HEADER,
+ EXT_OR_PORT_AUTH_COOKIE_HEADER_LEN,
+ &ext_or_auth_cookie,
+ &ext_or_auth_cookie_is_set);
+ tor_free(fname);
+ return retval;
+}
+
+/** Read data from <b>conn</b> and see if the client sent us the
+ * authentication type that she prefers to use in this session.
+ *
+ * Return -1 if we received corrupted data or if we don't support the
+ * authentication type. Return 0 if we need more data in
+ * <b>conn</b>. Return 1 if the authentication type negotiation was
+ * successful. */
+static int
+connection_ext_or_auth_neg_auth_type(connection_t *conn)
+{
+ char authtype[1] = {0};
+
+ if (connection_get_inbuf_len(conn) < 1)
+ return 0;
+
+ if (connection_fetch_from_buf(authtype, 1, conn) < 0)
+ return -1;
+
+ log_debug(LD_GENERAL, "Client wants us to use %d auth type", authtype[0]);
+ if (authtype[0] != EXT_OR_AUTHTYPE_SAFECOOKIE) {
+ /* '1' is the only auth type supported atm */
+ return -1;
+ }
+
+ conn->state = EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE;
+ return 1;
+}
+
+/** DOCDOC */
+STATIC int
+handle_client_auth_nonce(const char *client_nonce, size_t client_nonce_len,
+ char **client_hash_out,
+ char **reply_out, size_t *reply_len_out)
+{
+ char server_hash[EXT_OR_PORT_AUTH_HASH_LEN] = {0};
+ char server_nonce[EXT_OR_PORT_AUTH_NONCE_LEN] = {0};
+ char *reply;
+ size_t reply_len;
+
+ if (client_nonce_len != EXT_OR_PORT_AUTH_NONCE_LEN)
+ return -1;
+
+ /* Get our nonce */
+ if (crypto_rand(server_nonce, EXT_OR_PORT_AUTH_NONCE_LEN) < 0)
+ return -1;
+
+ { /* set up macs */
+ size_t hmac_s_msg_len = strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST) +
+ 2*EXT_OR_PORT_AUTH_NONCE_LEN;
+ size_t hmac_c_msg_len = strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST) +
+ 2*EXT_OR_PORT_AUTH_NONCE_LEN;
+
+ char *hmac_s_msg = tor_malloc_zero(hmac_s_msg_len);
+ char *hmac_c_msg = tor_malloc_zero(hmac_c_msg_len);
+ char *correct_client_hash = tor_malloc_zero(EXT_OR_PORT_AUTH_HASH_LEN);
+
+ memcpy(hmac_s_msg,
+ EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST,
+ strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST));
+ memcpy(hmac_s_msg + strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST),
+ client_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+ memcpy(hmac_s_msg + strlen(EXT_OR_PORT_AUTH_SERVER_TO_CLIENT_CONST) +
+ EXT_OR_PORT_AUTH_NONCE_LEN,
+ server_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+
+ memcpy(hmac_c_msg,
+ EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST,
+ strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST));
+ memcpy(hmac_c_msg + strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST),
+ client_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+ memcpy(hmac_c_msg + strlen(EXT_OR_PORT_AUTH_CLIENT_TO_SERVER_CONST) +
+ EXT_OR_PORT_AUTH_NONCE_LEN,
+ server_nonce, EXT_OR_PORT_AUTH_NONCE_LEN);
+
+ crypto_hmac_sha256(server_hash,
+ (char*)ext_or_auth_cookie,
+ EXT_OR_PORT_AUTH_COOKIE_LEN,
+ hmac_s_msg,
+ hmac_s_msg_len);
+
+ crypto_hmac_sha256(correct_client_hash,
+ (char*)ext_or_auth_cookie,
+ EXT_OR_PORT_AUTH_COOKIE_LEN,
+ hmac_c_msg,
+ hmac_c_msg_len);
+
+ /* Store the client hash we generated. We will need to compare it
+ with the hash sent by the client. */
+ *client_hash_out = correct_client_hash;
+
+ memwipe(hmac_s_msg, 0, hmac_s_msg_len);
+ memwipe(hmac_c_msg, 0, hmac_c_msg_len);
+
+ tor_free(hmac_s_msg);
+ tor_free(hmac_c_msg);
+ }
+
+ { /* debug logging */ /* XXX disable this codepath if not logging on debug?*/
+ char server_hash_encoded[(2*EXT_OR_PORT_AUTH_HASH_LEN) + 1];
+ char server_nonce_encoded[(2*EXT_OR_PORT_AUTH_NONCE_LEN) + 1];
+ char client_nonce_encoded[(2*EXT_OR_PORT_AUTH_NONCE_LEN) + 1];
+
+ base16_encode(server_hash_encoded, sizeof(server_hash_encoded),
+ server_hash, sizeof(server_hash));
+ base16_encode(server_nonce_encoded, sizeof(server_nonce_encoded),
+ server_nonce, sizeof(server_nonce));
+ base16_encode(client_nonce_encoded, sizeof(client_nonce_encoded),
+ client_nonce, sizeof(client_nonce));
+
+ log_debug(LD_GENERAL,
+ "server_hash: '%s'\nserver_nonce: '%s'\nclient_nonce: '%s'",
+ server_hash_encoded, server_nonce_encoded, client_nonce_encoded);
+
+ memwipe(server_hash_encoded, 0, sizeof(server_hash_encoded));
+ memwipe(server_nonce_encoded, 0, sizeof(server_nonce_encoded));
+ memwipe(client_nonce_encoded, 0, sizeof(client_nonce_encoded));
+ }
+
+ { /* write reply: (server_hash, server_nonce) */
+
+ reply_len = EXT_OR_PORT_AUTH_COOKIE_LEN+EXT_OR_PORT_AUTH_NONCE_LEN;
+ reply = tor_malloc_zero(reply_len);
+ memcpy(reply, server_hash, EXT_OR_PORT_AUTH_HASH_LEN);
+ memcpy(reply + EXT_OR_PORT_AUTH_HASH_LEN, server_nonce,
+ EXT_OR_PORT_AUTH_NONCE_LEN);
+ }
+
+ *reply_out = reply;
+ *reply_len_out = reply_len;
+
+ return 0;
+}
+
+/** Read the client's nonce out of <b>conn</b>, setup the safe-cookie
+ * crypto, and then send our own hash and nonce to the client
+ *
+ * Return -1 if there was an error; return 0 if we need more data in
+ * <b>conn</b>, and return 1 if we successfully retrieved the
+ * client's nonce and sent our own. */
+static int
+connection_ext_or_auth_handle_client_nonce(connection_t *conn)
+{
+ char client_nonce[EXT_OR_PORT_AUTH_NONCE_LEN];
+ char *reply=NULL;
+ size_t reply_len=0;
+
+ if (!ext_or_auth_cookie_is_set) { /* this should not happen */
+ log_warn(LD_BUG, "Extended ORPort authentication cookie was not set. "
+ "That's weird since we should have done that on startup. "
+ "This might be a Tor bug, please file a bug report. ");
+ return -1;
+ }
+
+ if (connection_get_inbuf_len(conn) < EXT_OR_PORT_AUTH_NONCE_LEN)
+ return 0;
+
+ if (connection_fetch_from_buf(client_nonce,
+ EXT_OR_PORT_AUTH_NONCE_LEN, conn) < 0)
+ return -1;
+
+ /* We extract the ClientNonce from the received data, and use it to
+ calculate ServerHash and ServerNonce according to proposal 217.
+
+ We also calculate our own ClientHash value and save it in the
+ connection state. We validate it later against the ClientHash
+ sent by the client. */
+ if (handle_client_auth_nonce(client_nonce, sizeof(client_nonce),
+ &TO_OR_CONN(conn)->ext_or_auth_correct_client_hash,
+ &reply, &reply_len) < 0)
+ return -1;
+
+ connection_write_to_buf(reply, reply_len, conn);
+
+ memwipe(reply, 0, reply_len);
+ tor_free(reply);
+
+ log_debug(LD_GENERAL, "Got client nonce, and sent our own nonce and hash.");
+
+ conn->state = EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH;
+ return 1;
+}
+
+#define connection_ext_or_auth_send_result_success(c) \
+ connection_ext_or_auth_send_result(c, 1)
+#define connection_ext_or_auth_send_result_fail(c) \
+ connection_ext_or_auth_send_result(c, 0)
+
+/** Send authentication results to <b>conn</b>. Successful results if
+ * <b>success</b> is set; failure results otherwise. */
+static void
+connection_ext_or_auth_send_result(connection_t *conn, int success)
+{
+ if (success)
+ connection_write_to_buf("\x01", 1, conn);
+ else
+ connection_write_to_buf("\x00", 1, conn);
+}
+
+/** Receive the client's hash from <b>conn</b>, validate that it's
+ * correct, and then send the authentication results to the client.
+ *
+ * Return -1 if there was an error during validation; return 0 if we
+ * need more data in <b>conn</b>, and return 1 if we successfully
+ * validated the client's hash and sent a happy authentication
+ * result. */
+static int
+connection_ext_or_auth_handle_client_hash(connection_t *conn)
+{
+ char provided_client_hash[EXT_OR_PORT_AUTH_HASH_LEN] = {0};
+
+ if (connection_get_inbuf_len(conn) < EXT_OR_PORT_AUTH_HASH_LEN)
+ return 0;
+
+ if (connection_fetch_from_buf(provided_client_hash,
+ EXT_OR_PORT_AUTH_HASH_LEN, conn) < 0)
+ return -1;
+
+ if (tor_memneq(TO_OR_CONN(conn)->ext_or_auth_correct_client_hash,
+ provided_client_hash, EXT_OR_PORT_AUTH_HASH_LEN)) {
+ log_warn(LD_GENERAL, "Incorrect client hash. Authentication failed.");
+ connection_ext_or_auth_send_result_fail(conn);
+ return -1;
+ }
+
+ log_debug(LD_GENERAL, "Got client's hash and it was legit.");
+
+ /* send positive auth result */
+ connection_ext_or_auth_send_result_success(conn);
+ conn->state = EXT_OR_CONN_STATE_OPEN;
+ return 1;
+}
+
+/** Handle data from <b>or_conn</b> received on Extended ORPort.
+ * Return -1 on error. 0 on unsufficient data. 1 on correct. */
+static int
+connection_ext_or_auth_process_inbuf(or_connection_t *or_conn)
+{
+ connection_t *conn = TO_CONN(or_conn);
+
+ /* State transitions of the Extended ORPort authentication protocol:
+
+ EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE (start state) ->
+ EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE ->
+ EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH ->
+ EXT_OR_CONN_STATE_OPEN
+
+ During EXT_OR_CONN_STATE_OPEN, data is handled by
+ connection_ext_or_process_inbuf().
+ */
+
+ switch (conn->state) { /* Functionify */
+ case EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE:
+ return connection_ext_or_auth_neg_auth_type(conn);
+
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE:
+ return connection_ext_or_auth_handle_client_nonce(conn);
+
+ case EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH:
+ return connection_ext_or_auth_handle_client_hash(conn);
+
+ default:
+ log_warn(LD_BUG, "Encountered unexpected connection state %d while trying "
+ "to process Extended ORPort authentication data.", conn->state);
+ return -1;
+ }
+}
+
+/** Extended ORPort commands (Transport-to-Bridge) */
+#define EXT_OR_CMD_TB_DONE 0x0000
+#define EXT_OR_CMD_TB_USERADDR 0x0001
+#define EXT_OR_CMD_TB_TRANSPORT 0x0002
+
+/** Extended ORPort commands (Bridge-to-Transport) */
+#define EXT_OR_CMD_BT_OKAY 0x1000
+#define EXT_OR_CMD_BT_DENY 0x1001
+#define EXT_OR_CMD_BT_CONTROL 0x1002
+
+/** Process a USERADDR command from the Extended
+ * ORPort. <b>payload</b> is a payload of size <b>len</b>.
+ *
+ * If the USERADDR command was well formed, change the address of
+ * <b>conn</b> to the address on the USERADDR command.
+ *
+ * Return 0 on success and -1 on error. */
+static int
+connection_ext_or_handle_cmd_useraddr(connection_t *conn,
+ const char *payload, uint16_t len)
+{
+ /* Copy address string. */
+ tor_addr_t addr;
+ uint16_t port;
+ char *addr_str;
+ char *address_part=NULL;
+ int res;
+ if (memchr(payload, '\0', len)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_NET, "Unexpected NUL in ExtORPort UserAddr");
+ return -1;
+ }
+
+ addr_str = tor_memdup_nulterm(payload, len);
+
+ res = tor_addr_port_split(LOG_INFO, addr_str, &address_part, &port);
+ tor_free(addr_str);
+ if (res<0)
+ return -1;
+
+ res = tor_addr_parse(&addr, address_part);
+ tor_free(address_part);
+ if (res<0)
+ return -1;
+
+ { /* do some logging */
+ char *old_address = tor_dup_addr(&conn->addr);
+ char *new_address = tor_dup_addr(&addr);
+
+ log_debug(LD_NET, "Received USERADDR."
+ "We rewrite our address from '%s:%u' to '%s:%u'.",
+ safe_str(old_address), conn->port, safe_str(new_address), port);
+
+ tor_free(old_address);
+ tor_free(new_address);
+ }
+
+ /* record the address */
+ tor_addr_copy(&conn->addr, &addr);
+ conn->port = port;
+ if (conn->address) {
+ tor_free(conn->address);
+ }
+ conn->address = tor_dup_addr(&addr);
+
+ return 0;
+}
+
+/** Process a TRANSPORT command from the Extended
+ * ORPort. <b>payload</b> is a payload of size <b>len</b>.
+ *
+ * If the TRANSPORT command was well formed, register the name of the
+ * transport on <b>conn</b>.
+ *
+ * Return 0 on success and -1 on error. */
+static int
+connection_ext_or_handle_cmd_transport(or_connection_t *conn,
+ const char *payload, uint16_t len)
+{
+ char *transport_str;
+ if (memchr(payload, '\0', len)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_NET, "Unexpected NUL in ExtORPort Transport");
+ return -1;
+ }
+
+ transport_str = tor_memdup_nulterm(payload, len);
+
+ /* Transport names MUST be C-identifiers. */
+ if (!string_is_C_identifier(transport_str)) {
+ tor_free(transport_str);
+ return -1;
+ }
+
+ /* If ext_or_transport is already occupied (because the PT sent two
+ * TRANSPORT commands), deallocate the old name and keep the new
+ * one */
+ if (conn->ext_or_transport)
+ tor_free(conn->ext_or_transport);
+
+ conn->ext_or_transport = transport_str;
+ return 0;
+}
+
+#define EXT_OR_CONN_STATE_IS_AUTHENTICATING(st) \
+ ((st) <= EXT_OR_CONN_STATE_AUTH_MAX)
+
+/** Process Extended ORPort messages from <b>or_conn</b>. */
+int
+connection_ext_or_process_inbuf(or_connection_t *or_conn)
+{
+ connection_t *conn = TO_CONN(or_conn);
+ ext_or_cmd_t *command;
+ int r;
+
+ /* DOCDOC Document the state machine and transitions in this function */
+
+ /* If we are still in the authentication stage, process traffic as
+ authentication data: */
+ while (EXT_OR_CONN_STATE_IS_AUTHENTICATING(conn->state)) {
+ log_debug(LD_GENERAL, "Got Extended ORPort authentication data (%u).",
+ (unsigned int) connection_get_inbuf_len(conn));
+ r = connection_ext_or_auth_process_inbuf(or_conn);
+ if (r < 0) {
+ connection_mark_for_close(conn);
+ return -1;
+ } else if (r == 0) {
+ return 0;
+ }
+ /* if r > 0, loop and process more data (if any). */
+ }
+
+ while (1) {
+ log_debug(LD_GENERAL, "Got Extended ORPort data.");
+ command = NULL;
+ r = connection_fetch_ext_or_cmd_from_buf(conn, &command);
+ if (r < 0)
+ goto err;
+ else if (r == 0)
+ return 0; /* need to wait for more data */
+
+ /* Got a command! */
+ tor_assert(command);
+
+ if (command->cmd == EXT_OR_CMD_TB_DONE) {
+ if (connection_get_inbuf_len(conn)) {
+ /* The inbuf isn't empty; the client is misbehaving. */
+ goto err;
+ }
+
+ log_debug(LD_NET, "Received DONE.");
+
+ /* If the transport proxy did not use the TRANSPORT command to
+ * specify the transport name, mark this as unknown transport. */
+ if (!or_conn->ext_or_transport) {
+ /* We write this string this way to avoid ??>, which is a C
+ * trigraph. */
+ or_conn->ext_or_transport = tor_strdup("<?" "?>");
+ }
+
+ connection_write_ext_or_command(conn, EXT_OR_CMD_BT_OKAY, NULL, 0);
+
+ /* can't transition immediately; need to flush first. */
+ conn->state = EXT_OR_CONN_STATE_FLUSHING;
+ connection_stop_reading(conn);
+ } else if (command->cmd == EXT_OR_CMD_TB_USERADDR) {
+ if (connection_ext_or_handle_cmd_useraddr(conn,
+ command->body, command->len) < 0)
+ goto err;
+ } else if (command->cmd == EXT_OR_CMD_TB_TRANSPORT) {
+ if (connection_ext_or_handle_cmd_transport(or_conn,
+ command->body, command->len) < 0)
+ goto err;
+ } else {
+ log_notice(LD_NET,"Got Extended ORPort command we don't regognize (%u).",
+ command->cmd);
+ }
+
+ ext_or_cmd_free(command);
+ }
+
+ return 0;
+
+ err:
+ ext_or_cmd_free(command);
+ connection_mark_for_close(conn);
+ return -1;
+}
+
+/** <b>conn</b> finished flushing Extended ORPort messages to the
+ * network, and is now ready to accept OR traffic. This function
+ * does the transition. */
+int
+connection_ext_or_finished_flushing(or_connection_t *conn)
+{
+ if (conn->base_.state == EXT_OR_CONN_STATE_FLUSHING) {
+ connection_start_reading(TO_CONN(conn));
+ connection_ext_or_transition(conn);
+ }
+ return 0;
+}
+
+/** Initiate Extended ORPort authentication, by sending the list of
+ * supported authentication types to the client. */
+int
+connection_ext_or_start_auth(or_connection_t *or_conn)
+{
+ connection_t *conn = TO_CONN(or_conn);
+ const uint8_t authtypes[] = {
+ /* We only support authtype '1' for now. */
+ EXT_OR_AUTHTYPE_SAFECOOKIE,
+ /* Marks the end of the list. */
+ 0
+ };
+
+ log_debug(LD_GENERAL,
+ "ExtORPort authentication: Sending supported authentication types");
+
+ connection_write_to_buf((const char *)authtypes, sizeof(authtypes), conn);
+ conn->state = EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE;
+
+ return 0;
+}
+
+/** Free any leftover allocated memory of the ext_orport.c subsystem. */
+void
+ext_orport_free_all(void)
+{
+ if (ext_or_auth_cookie) /* Free the auth cookie */
+ tor_free(ext_or_auth_cookie);
+}
+
diff --git a/src/or/ext_orport.h b/src/or/ext_orport.h
new file mode 100644
index 000000000..ce45e5f41
--- /dev/null
+++ b/src/or/ext_orport.h
@@ -0,0 +1,42 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef EXT_ORPORT_H
+#define EXT_ORPORT_H
+
+int connection_ext_or_start_auth(or_connection_t *or_conn);
+
+ext_or_cmd_t *ext_or_cmd_new(uint16_t len);
+void ext_or_cmd_free(ext_or_cmd_t *cmd);
+void connection_or_set_ext_or_identifier(or_connection_t *conn);
+void connection_or_remove_from_ext_or_id_map(or_connection_t *conn);
+void connection_or_clear_ext_or_id_map(void);
+or_connection_t *connection_or_get_by_ext_or_id(const char *id);
+
+int connection_ext_or_finished_flushing(or_connection_t *conn);
+int connection_ext_or_process_inbuf(or_connection_t *or_conn);
+
+int init_ext_or_cookie_authentication(int is_enabled);
+char *get_ext_or_auth_cookie_file_name(void);
+void ext_orport_free_all(void);
+
+#ifdef EXT_ORPORT_PRIVATE
+STATIC int connection_write_ext_or_command(connection_t *conn,
+ uint16_t command,
+ const char *body,
+ size_t bodylen);
+STATIC int handle_client_auth_nonce(const char *client_nonce,
+ size_t client_nonce_len,
+ char **client_hash_out,
+ char **reply_out, size_t *reply_len_out);
+#ifdef TOR_UNIT_TESTS
+extern uint8_t *ext_or_auth_cookie;
+extern int ext_or_auth_cookie_is_set;
+#endif
+#endif
+
+#endif
+
diff --git a/src/or/geoip.c b/src/or/geoip.c
index d6e8ee0d0..dc4730c81 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -120,7 +120,7 @@ geoip_add_entry(const tor_addr_t *low, const tor_addr_t *high,
/** Add an entry to the GeoIP table indicated by <b>family</b>,
* parsing it from <b>line</b>. The format is as for geoip_load_file(). */
-/*private*/ int
+STATIC int
geoip_parse_entry(const char *line, sa_family_t family)
{
tor_addr_t low_addr, high_addr;
@@ -363,7 +363,7 @@ geoip_load_file(sa_family_t family, const char *filename)
* be less than geoip_get_n_countries(). To decode it, call
* geoip_get_country_name().
*/
-int
+STATIC int
geoip_get_country_by_ipv4(uint32_t ipaddr)
{
geoip_ipv4_entry_t *ent;
@@ -379,7 +379,7 @@ geoip_get_country_by_ipv4(uint32_t ipaddr)
* 0 for the 'unknown country'. The return value will always be less than
* geoip_get_n_countries(). To decode it, call geoip_get_country_name().
*/
-int
+STATIC int
geoip_get_country_by_ipv6(const struct in6_addr *addr)
{
geoip_ipv6_entry_t *ent;
@@ -461,6 +461,10 @@ geoip_db_digest(sa_family_t family)
typedef struct clientmap_entry_t {
HT_ENTRY(clientmap_entry_t) node;
tor_addr_t addr;
+ /* Name of pluggable transport used by this client. NULL if no
+ pluggable transport was used. */
+ char *transport_name;
+
/** Time when we last saw this IP address, in MINUTES since the epoch.
*
* (This will run out of space around 4011 CE. If Tor is still in use around
@@ -482,12 +486,18 @@ static HT_HEAD(clientmap, clientmap_entry_t) client_history =
static INLINE unsigned
clientmap_entry_hash(const clientmap_entry_t *a)
{
- return ht_improve_hash(tor_addr_hash(&a->addr));
+ unsigned h = tor_addr_hash(&a->addr);
+ if (a->transport_name)
+ h += ht_string_hash(a->transport_name);
+ return ht_improve_hash(h);
}
/** Hashtable helper: compare two clientmap_entry_t values for equality. */
static INLINE int
clientmap_entries_eq(const clientmap_entry_t *a, const clientmap_entry_t *b)
{
+ if (strcmp_opt(a->transport_name, b->transport_name))
+ return 0;
+
return !tor_addr_compare(&a->addr, &b->addr, CMP_EXACT) &&
a->action == b->action;
}
@@ -497,6 +507,17 @@ HT_PROTOTYPE(clientmap, clientmap_entry_t, node, clientmap_entry_hash,
HT_GENERATE(clientmap, clientmap_entry_t, node, clientmap_entry_hash,
clientmap_entries_eq, 0.6, malloc, realloc, free);
+/** Free all storage held by <b>ent</b>. */
+static void
+clientmap_entry_free(clientmap_entry_t *ent)
+{
+ if (!ent)
+ return;
+
+ tor_free(ent->transport_name);
+ tor_free(ent);
+}
+
/** Clear history of connecting clients used by entry and bridge stats. */
static void
client_history_clear(void)
@@ -507,7 +528,7 @@ client_history_clear(void)
if ((*ent)->action == GEOIP_CLIENT_CONNECT) {
this = *ent;
next = HT_NEXT_RMV(clientmap, &client_history, ent);
- tor_free(this);
+ clientmap_entry_free(this);
} else {
next = HT_NEXT(clientmap, &client_history, ent);
}
@@ -519,10 +540,14 @@ client_history_clear(void)
* configured accordingly. */
void
geoip_note_client_seen(geoip_client_action_t action,
- const tor_addr_t *addr, time_t now)
+ const tor_addr_t *addr,
+ const char *transport_name,
+ time_t now)
{
const or_options_t *options = get_options();
clientmap_entry_t lookup, *ent;
+ memset(&lookup, 0, sizeof(clientmap_entry_t));
+
if (action == GEOIP_CLIENT_CONNECT) {
/* Only remember statistics as entry guard or as bridge. */
if (!options->EntryStatistics &&
@@ -534,12 +559,20 @@ geoip_note_client_seen(geoip_client_action_t action,
return;
}
+ log_debug(LD_GENERAL, "Seen client from '%s' with transport '%s'.",
+ safe_str_client(fmt_addr((addr))),
+ transport_name ? transport_name : "<no transport>");
+
tor_addr_copy(&lookup.addr, addr);
lookup.action = (int)action;
+ lookup.transport_name = (char*) transport_name;
ent = HT_FIND(clientmap, &client_history, &lookup);
+
if (! ent) {
ent = tor_malloc_zero(sizeof(clientmap_entry_t));
tor_addr_copy(&ent->addr, addr);
+ if (transport_name)
+ ent->transport_name = tor_strdup(transport_name);
ent->action = (int)action;
HT_INSERT(clientmap, &client_history, ent);
}
@@ -566,7 +599,7 @@ remove_old_client_helper_(struct clientmap_entry_t *ent, void *_cutoff)
{
time_t cutoff = *(time_t*)_cutoff / 60;
if (ent->last_seen_in_minutes < cutoff) {
- tor_free(ent);
+ clientmap_entry_free(ent);
return 1;
} else {
return 0;
@@ -769,6 +802,106 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
}
}
+/** Return the bridge-ip-transports string that should be inserted in
+ * our extra-info descriptor. Return NULL if the bridge-ip-transports
+ * line should be empty. */
+char *
+geoip_get_transport_history(void)
+{
+ unsigned granularity = IP_GRANULARITY;
+ /** String hash table <name of transport> -> <number of users>. */
+ strmap_t *transport_counts = strmap_new();
+
+ /** Smartlist that contains copies of the names of the transports
+ that have been used. */
+ smartlist_t *transports_used = smartlist_new();
+
+ /* Special string to signify that no transport was used for this
+ connection. Pluggable transport names can't have symbols in their
+ names, so this string will never collide with a real transport. */
+ static const char* no_transport_str = "<OR>";
+
+ clientmap_entry_t **ent;
+ const char *transport_name = NULL;
+ smartlist_t *string_chunks = smartlist_new();
+ char *the_string = NULL;
+
+ /* If we haven't seen any clients yet, return NULL. */
+ if (HT_EMPTY(&client_history))
+ goto done;
+
+ /** We do the following steps to form the transport history string:
+ * a) Foreach client that uses a pluggable transport, we increase the
+ * times that transport was used by one. If the client did not use
+ * a transport, we increase the number of times someone connected
+ * without obfuscation.
+ * b) Foreach transport we observed, we write its transport history
+ * string and push it to string_chunks. So, for example, if we've
+ * seen 665 obfs2 clients, we write "obfs2=665".
+ * c) We concatenate string_chunks to form the final string.
+ */
+
+ log_debug(LD_GENERAL,"Starting iteration for transport history. %d clients.",
+ HT_SIZE(&client_history));
+
+ /* Loop through all clients. */
+ HT_FOREACH(ent, clientmap, &client_history) {
+ uintptr_t val;
+ void *ptr;
+ transport_name = (*ent)->transport_name;
+ if (!transport_name)
+ transport_name = no_transport_str;
+
+ /* Increase the count for this transport name. */
+ ptr = strmap_get(transport_counts, transport_name);
+ val = (uintptr_t)ptr;
+ val++;
+ ptr = (void*)val;
+ strmap_set(transport_counts, transport_name, ptr);
+
+ /* If it's the first time we see this transport, note it. */
+ if (val == 1)
+ smartlist_add(transports_used, tor_strdup(transport_name));
+
+ log_debug(LD_GENERAL, "Client from '%s' with transport '%s'. "
+ "I've now seen %d clients.",
+ safe_str_client(fmt_addr(&(*ent)->addr)),
+ transport_name ? transport_name : "<no transport>",
+ (int)val);
+ }
+
+ /* Sort the transport names (helps with unit testing). */
+ smartlist_sort_strings(transports_used);
+
+ /* Loop through all seen transports. */
+ SMARTLIST_FOREACH_BEGIN(transports_used, const char *, transport_name) {
+ void *transport_count_ptr = strmap_get(transport_counts, transport_name);
+ uintptr_t transport_count = (uintptr_t) transport_count_ptr;
+
+ log_debug(LD_GENERAL, "We got "U64_FORMAT" clients with transport '%s'.",
+ U64_PRINTF_ARG((uint64_t)transport_count), transport_name);
+
+ smartlist_add_asprintf(string_chunks, "%s="U64_FORMAT,
+ transport_name,
+ U64_PRINTF_ARG(round_uint64_to_next_multiple_of(
+ (uint64_t)transport_count,
+ granularity)));
+ } SMARTLIST_FOREACH_END(transport_name);
+
+ the_string = smartlist_join_strings(string_chunks, ",", 0, NULL);
+
+ log_debug(LD_GENERAL, "Final bridge-ip-transports string: '%s'", the_string);
+
+ done:
+ strmap_free(transport_counts, NULL);
+ SMARTLIST_FOREACH(transports_used, char *, s, tor_free(s));
+ smartlist_free(transports_used);
+ SMARTLIST_FOREACH(string_chunks, char *, s, tor_free(s));
+ smartlist_free(string_chunks);
+
+ return the_string;
+}
+
/** Return a newly allocated comma-separated string containing statistics
* on network status downloads. The string contains the number of completed
* requests, timeouts, and still running requests as well as the download
@@ -1037,7 +1170,7 @@ geoip_reset_dirreq_stats(time_t now)
if ((*ent)->action == GEOIP_CLIENT_NETWORKSTATUS) {
this = *ent;
next = HT_NEXT_RMV(clientmap, &client_history, ent);
- tor_free(this);
+ clientmap_entry_free(this);
} else {
next = HT_NEXT(clientmap, &client_history, ent);
}
@@ -1189,6 +1322,8 @@ validate_bridge_stats(const char *stats_str, time_t now)
const char *BRIDGE_STATS_END = "bridge-stats-end ";
const char *BRIDGE_IPS = "bridge-ips ";
const char *BRIDGE_IPS_EMPTY_LINE = "bridge-ips\n";
+ const char *BRIDGE_TRANSPORTS = "bridge-ip-transports ";
+ const char *BRIDGE_TRANSPORTS_EMPTY_LINE = "bridge-ip-transports\n";
const char *tmp;
time_t stats_end_time;
int seconds;
@@ -1223,6 +1358,15 @@ validate_bridge_stats(const char *stats_str, time_t now)
return 0;
}
+ /* Parse: "bridge-ip-transports PT=N,PT=N,..." */
+ tmp = find_str_at_start_of_line(stats_str, BRIDGE_TRANSPORTS);
+ if (!tmp) {
+ /* Look if there is an empty "bridge-ip-transports" line */
+ tmp = find_str_at_start_of_line(stats_str, BRIDGE_TRANSPORTS_EMPTY_LINE);
+ if (!tmp)
+ return 0;
+ }
+
return 1;
}
@@ -1236,7 +1380,8 @@ static char *bridge_stats_extrainfo = NULL;
char *
geoip_format_bridge_stats(time_t now)
{
- char *out = NULL, *country_data = NULL, *ipver_data = NULL;
+ char *out = NULL;
+ char *country_data = NULL, *ipver_data = NULL, *transport_data = NULL;
long duration = now - start_of_bridge_stats_interval;
char written[ISO_TIME_LEN+1];
@@ -1247,16 +1392,20 @@ geoip_format_bridge_stats(time_t now)
format_iso_time(written, now);
geoip_get_client_history(GEOIP_CLIENT_CONNECT, &country_data, &ipver_data);
+ transport_data = geoip_get_transport_history();
tor_asprintf(&out,
"bridge-stats-end %s (%ld s)\n"
"bridge-ips %s\n"
- "bridge-ip-versions %s\n",
+ "bridge-ip-versions %s\n"
+ "bridge-ip-transports %s\n",
written, duration,
country_data ? country_data : "",
- ipver_data ? ipver_data : "");
+ ipver_data ? ipver_data : "",
+ transport_data ? transport_data : "");
tor_free(country_data);
tor_free(ipver_data);
+ tor_free(transport_data);
return out;
}
@@ -1515,7 +1664,7 @@ geoip_free_all(void)
for (ent = HT_START(clientmap, &client_history); ent != NULL; ent = next) {
this = *ent;
next = HT_NEXT_RMV(clientmap, &client_history, ent);
- tor_free(this);
+ clientmap_entry_free(this);
}
HT_CLEAR(clientmap, &client_history);
}
@@ -1530,5 +1679,6 @@ geoip_free_all(void)
}
clear_geoip_db();
+ tor_free(bridge_stats_extrainfo);
}
diff --git a/src/or/geoip.h b/src/or/geoip.h
index ebefee5f4..b9b53c300 100644
--- a/src/or/geoip.h
+++ b/src/or/geoip.h
@@ -12,10 +12,12 @@
#ifndef TOR_GEOIP_H
#define TOR_GEOIP_H
+#include "testsupport.h"
+
#ifdef GEOIP_PRIVATE
-int geoip_parse_entry(const char *line, sa_family_t family);
-int geoip_get_country_by_ipv4(uint32_t ipaddr);
-int geoip_get_country_by_ipv6(const struct in6_addr *addr);
+STATIC int geoip_parse_entry(const char *line, sa_family_t family);
+STATIC int geoip_get_country_by_ipv4(uint32_t ipaddr);
+STATIC int geoip_get_country_by_ipv6(const struct in6_addr *addr);
#endif
int should_record_bridge_info(const or_options_t *options);
int geoip_load_file(sa_family_t family, const char *filename);
@@ -27,10 +29,12 @@ const char *geoip_db_digest(sa_family_t family);
country_t geoip_get_country(const char *countrycode);
void geoip_note_client_seen(geoip_client_action_t action,
- const tor_addr_t *addr, time_t now);
+ const tor_addr_t *addr, const char *transport_name,
+ time_t now);
void geoip_remove_old_clients(time_t cutoff);
void geoip_note_ns_response(geoip_ns_response_t response);
+char *geoip_get_transport_history(void);
int geoip_get_client_history(geoip_client_action_t action,
char **country_str, char **ipver_str);
char *geoip_get_request_history(void);
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index a41257133..22c0f253d 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -1010,6 +1010,7 @@ getinfo_helper_accounting(control_connection_t *conn,
return 0;
}
+#ifdef TOR_UNIT_TESTS
/**
* Manually change the hibernation state. Private; used only by the unit
* tests.
@@ -1019,4 +1020,5 @@ hibernate_set_state_for_testing_(hibernate_state_t newstate)
{
hibernate_state = newstate;
}
+#endif
diff --git a/src/or/hibernate.h b/src/or/hibernate.h
index d2d6989e1..18832fbc6 100644
--- a/src/or/hibernate.h
+++ b/src/or/hibernate.h
@@ -45,8 +45,10 @@ typedef enum {
HIBERNATE_STATE_INITIAL=5
} hibernate_state_t;
+#ifdef TOR_UNIT_TESTS
void hibernate_set_state_for_testing_(hibernate_state_t newstate);
#endif
+#endif
#endif
diff --git a/src/or/include.am b/src/or/include.am
index 65dbeff53..8922e0397 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -1,5 +1,13 @@
bin_PROGRAMS+= src/or/tor
-noinst_LIBRARIES+= src/or/libtor.a
+noinst_LIBRARIES += \
+ src/or/libtor.a
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += \
+ src/or/libtor-testing.a
+endif
+if COVERAGE_ENABLED
+noinst_PROGRAMS+= src/or/tor-cov
+endif
if BUILD_NT_SERVICES
tor_platform_source=src/or/ntmain.c
@@ -21,7 +29,7 @@ else
onion_ntor_source=
endif
-src_or_libtor_a_SOURCES = \
+LIBTOR_A_SOURCES = \
src/or/addressmap.c \
src/or/buffers.c \
src/or/channel.c \
@@ -48,6 +56,7 @@ src_or_libtor_a_SOURCES = \
src/or/fp_pair.c \
src/or/geoip.c \
src/or/entrynodes.c \
+ src/or/ext_orport.c \
src/or/hibernate.c \
src/or/main.c \
src/or/microdesc.c \
@@ -77,6 +86,9 @@ src_or_libtor_a_SOURCES = \
$(onion_ntor_source) \
src/or/config_codedigest.c
+src_or_libtor_a_SOURCES = $(LIBTOR_A_SOURCES)
+src_or_libtor_testing_a_SOURCES = $(LIBTOR_A_SOURCES)
+
#libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \
# ../common/libor-event.a
@@ -90,6 +102,9 @@ AM_CPPFLAGS += -DSHARE_DATADIR="\"$(datadir)\"" \
-DLOCALSTATEDIR="\"$(localstatedir)\"" \
-DBINDIR="\"$(bindir)\""
+src_or_libtor_testing_a_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_or_libtor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
# -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.
@@ -102,6 +117,18 @@ src_or_tor_LDADD = src/or/libtor.a src/common/libor.a \
@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
@TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+if COVERAGE_ENABLED
+src_or_tor_cov_SOURCES = src/or/tor_main.c
+src_or_tor_cov_CPPFLAGS = -DTOR_UNIT_TESTS $(AM_CPPFLAGS)
+src_or_tor_cov_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_or_tor_cov_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
+src_or_tor_cov_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a $(LIBDONNA) \
+ src/common/libor-event-testing.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+endif
+
ORHEADERS = \
src/or/addressmap.h \
src/or/buffers.h \
@@ -127,6 +154,7 @@ ORHEADERS = \
src/or/dns.h \
src/or/dnsserv.h \
src/or/eventdns_tor.h \
+ src/or/ext_orport.h \
src/or/fp_pair.h \
src/or/geoip.h \
src/or/entrynodes.h \
diff --git a/src/or/main.c b/src/or/main.c
index 8e2845f47..33e1c6437 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -52,11 +52,13 @@
#include "routerparse.h"
#include "statefile.h"
#include "status.h"
+#include "ext_orport.h"
#ifdef USE_DMALLOC
#include <dmalloc.h>
#include <openssl/crypto.h>
#endif
#include "memarea.h"
+#include "../common/sandbox.h"
#ifdef HAVE_EVENT2_EVENT_H
#include <event2/event.h>
@@ -412,6 +414,19 @@ connection_unlink(connection_t *conn)
connection_free(conn);
}
+/** Initialize the global connection list, closeable connection list,
+ * and active connection list. */
+STATIC void
+init_connection_lists(void)
+{
+ if (!connection_array)
+ connection_array = smartlist_new();
+ if (!closeable_connection_lst)
+ closeable_connection_lst = smartlist_new();
+ if (!active_linked_connection_lst)
+ active_linked_connection_lst = smartlist_new();
+}
+
/** Schedule <b>conn</b> to be closed. **/
void
add_connection_to_closeable_list(connection_t *conn)
@@ -505,8 +520,8 @@ connection_is_reading(connection_t *conn)
}
/** Tell the main loop to stop notifying <b>conn</b> of any read events. */
-void
-connection_stop_reading(connection_t *conn)
+MOCK_IMPL(void,
+connection_stop_reading,(connection_t *conn))
{
tor_assert(conn);
@@ -530,8 +545,8 @@ connection_stop_reading(connection_t *conn)
}
/** Tell the main loop to start notifying <b>conn</b> of any read events. */
-void
-connection_start_reading(connection_t *conn)
+MOCK_IMPL(void,
+connection_start_reading,(connection_t *conn))
{
tor_assert(conn);
@@ -570,8 +585,8 @@ connection_is_writing(connection_t *conn)
}
/** Tell the main loop to stop notifying <b>conn</b> of any write events. */
-void
-connection_stop_writing(connection_t *conn)
+MOCK_IMPL(void,
+connection_stop_writing,(connection_t *conn))
{
tor_assert(conn);
@@ -596,8 +611,8 @@ connection_stop_writing(connection_t *conn)
}
/** Tell the main loop to start notifying <b>conn</b> of any write events. */
-void
-connection_start_writing(connection_t *conn)
+MOCK_IMPL(void,
+connection_start_writing,(connection_t *conn))
{
tor_assert(conn);
@@ -685,7 +700,7 @@ connection_stop_reading_from_linked_conn(connection_t *conn)
}
/** Close all connections that have been scheduled to get closed. */
-static void
+STATIC void
close_closeable_connections(void)
{
int i;
@@ -1874,7 +1889,7 @@ do_hup(void)
}
/** Tor main loop. */
-/* static */ int
+int
do_main_loop(void)
{
int loop_result;
@@ -1891,6 +1906,13 @@ do_main_loop(void)
}
}
+#ifdef USE_BUFFEREVENTS
+ log_warn(LD_GENERAL, "Tor was compiled with the --enable-bufferevents "
+ "option. This is still experimental, and might cause strange "
+ "bugs. If you want a more stable Tor, be sure to build without "
+ "--enable-bufferevents.");
+#endif
+
handle_signals(1);
/* load the private keys, if we're supposed to have them, and set up the
@@ -2294,18 +2316,13 @@ handle_signals(int is_parent)
/** Main entry point for the Tor command-line client.
*/
-/* static */ int
+int
tor_init(int argc, char *argv[])
{
char buf[256];
int i, quiet = 0;
time_of_process_start = time(NULL);
- if (!connection_array)
- connection_array = smartlist_new();
- if (!closeable_connection_lst)
- closeable_connection_lst = smartlist_new();
- if (!active_linked_connection_lst)
- active_linked_connection_lst = smartlist_new();
+ init_connection_lists();
/* Have the log set up with our application name. */
tor_snprintf(buf, sizeof(buf), "Tor %s", get_version());
log_set_application_name(buf);
@@ -2494,6 +2511,8 @@ tor_free_all(int postfork)
memarea_clear_freelist();
nodelist_free_all();
microdesc_free_all();
+ ext_orport_free_all();
+ control_free_all();
if (!postfork) {
config_free_all();
or_state_free_all();
@@ -2560,7 +2579,7 @@ tor_cleanup(void)
}
/** Read/create keys as needed, and echo our fingerprint to stdout. */
-/* static */ int
+static int
do_list_fingerprint(void)
{
char buf[FINGERPRINT_LEN+1];
@@ -2590,7 +2609,7 @@ do_list_fingerprint(void)
/** Entry point for password hashing: take the desired password from
* the command line, and print its salted hash to stdout. **/
-/* static */ void
+static void
do_hash_password(void)
{
@@ -2697,6 +2716,14 @@ tor_main(int argc, char *argv[])
#endif
if (tor_init(argc, argv)<0)
return -1;
+
+ if (get_options()->Sandbox) {
+ if (tor_global_sandbox()) {
+ log_err(LD_BUG,"Failed to create syscall sandbox filter");
+ return -1;
+ }
+ }
+
switch (get_options()->command) {
case CMD_RUN_TOR:
#ifdef NT_SERVICE
diff --git a/src/or/main.h b/src/or/main.h
index 338449b6a..df302ffa7 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -36,12 +36,12 @@ typedef enum watchable_events {
} watchable_events_t;
void connection_watch_events(connection_t *conn, watchable_events_t events);
int connection_is_reading(connection_t *conn);
-void connection_stop_reading(connection_t *conn);
-void connection_start_reading(connection_t *conn);
+MOCK_DECL(void,connection_stop_reading,(connection_t *conn));
+MOCK_DECL(void,connection_start_reading,(connection_t *conn));
int connection_is_writing(connection_t *conn);
-void connection_stop_writing(connection_t *conn);
-void connection_start_writing(connection_t *conn);
+MOCK_DECL(void,connection_stop_writing,(connection_t *conn));
+MOCK_DECL(void,connection_start_writing,(connection_t *conn));
void connection_stop_reading_from_linked_conn(connection_t *conn);
@@ -66,11 +66,12 @@ void tor_free_all(int postfork);
int tor_main(int argc, char *argv[]);
-#ifdef MAIN_PRIVATE
int do_main_loop(void);
-int do_list_fingerprint(void);
-void do_hash_password(void);
int tor_init(int argc, char **argv);
+
+#ifdef MAIN_PRIVATE
+STATIC void init_connection_lists(void);
+STATIC void close_closeable_connections(void);
#endif
#endif
diff --git a/src/or/ntmain.c b/src/or/ntmain.c
index 8b67b8682..2fa074d0b 100644
--- a/src/or/ntmain.c
+++ b/src/or/ntmain.c
@@ -3,7 +3,6 @@
* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#define MAIN_PRIVATE
#include "or.h"
#include "config.h"
#include "main.h"
diff --git a/src/or/or.h b/src/or/or.h
index 94fbe43f6..2daf12b82 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -228,8 +228,14 @@ typedef enum {
#define CONN_TYPE_AP_NATD_LISTENER 14
/** Type for sockets listening for DNS requests. */
#define CONN_TYPE_AP_DNS_LISTENER 15
-#define CONN_TYPE_MAX_ 15
-/* !!!! If CONN_TYPE_MAX_ is ever over 15, we must grow the type field in
+
+/** Type for connections from the Extended ORPort. */
+#define CONN_TYPE_EXT_OR 16
+/** Type for sockets listening for Extended ORPort connections. */
+#define CONN_TYPE_EXT_OR_LISTENER 17
+
+#define CONN_TYPE_MAX_ 17
+/* !!!! If _CONN_TYPE_MAX is ever over 31, we must grow the type field in
* connection_t. */
/* Proxy client types */
@@ -309,6 +315,25 @@ typedef enum {
#define OR_CONN_STATE_OPEN 8
#define OR_CONN_STATE_MAX_ 8
+/** States of the Extended ORPort protocol. Be careful before changing
+ * the numbers: they matter. */
+#define EXT_OR_CONN_STATE_MIN_ 1
+/** Extended ORPort authentication is waiting for the authentication
+ * type selected by the client. */
+#define EXT_OR_CONN_STATE_AUTH_WAIT_AUTH_TYPE 1
+/** Extended ORPort authentication is waiting for the client nonce. */
+#define EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE 2
+/** Extended ORPort authentication is waiting for the client hash. */
+#define EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH 3
+#define EXT_OR_CONN_STATE_AUTH_MAX 3
+/** Authentication finished and the Extended ORPort is now accepting
+ * traffic. */
+#define EXT_OR_CONN_STATE_OPEN 4
+/** Extended ORPort is flushing its last messages and preparing to
+ * start accepting OR connections. */
+#define EXT_OR_CONN_STATE_FLUSHING 5
+#define EXT_OR_CONN_STATE_MAX_ 5
+
#define EXIT_CONN_STATE_MIN_ 1
/** State for an exit connection: waiting for response from DNS farm. */
#define EXIT_CONN_STATE_RESOLVING 1
@@ -1082,9 +1107,17 @@ typedef struct var_cell_t {
uint8_t payload[FLEXIBLE_ARRAY_MEMBER];
} var_cell_t;
+/** A parsed Extended ORPort message. */
+typedef struct ext_or_cmd_t {
+ uint16_t cmd; /** Command type */
+ uint16_t len; /** Body length */
+ char body[FLEXIBLE_ARRAY_MEMBER]; /** Message body */
+} ext_or_cmd_t;
+
/** A cell as packed for writing to the network. */
typedef struct packed_cell_t {
- struct packed_cell_t *next; /**< Next cell queued on this circuit. */
+ /** Next cell queued on this circuit. */
+ TOR_SIMPLEQ_ENTRY(packed_cell_t) next;
char body[CELL_MAX_NETWORK_SIZE]; /**< Cell as packed for network. */
} packed_cell_t;
@@ -1106,8 +1139,8 @@ typedef struct insertion_time_queue_t {
/** A queue of cells on a circuit, waiting to be added to the
* or_connection_t's outbuf. */
typedef struct cell_queue_t {
- packed_cell_t *head; /**< The first cell, or NULL if the queue is empty. */
- packed_cell_t *tail; /**< The last cell, or NULL if the queue is empty. */
+ /** Linked list of packed_cell_t*/
+ TOR_SIMPLEQ_HEAD(cell_simpleq, packed_cell_t) head;
int n; /**< The number of cells in the queue. */
insertion_time_queue_t *insertion_times; /**< Insertion times of cells. */
} cell_queue_t;
@@ -1162,7 +1195,7 @@ typedef struct connection_t {
* *_CONNECTION_MAGIC. */
uint8_t state; /**< Current state of this connection. */
- unsigned int type:4; /**< What kind of connection is this? */
+ unsigned int type:5; /**< What kind of connection is this? */
unsigned int purpose:5; /**< Only used for DIR and EXIT types currently. */
/* The next fields are all one-bit booleans. Some are only applicable to
@@ -1404,6 +1437,9 @@ typedef struct or_handshake_state_t {
/**@}*/
} or_handshake_state_t;
+/** Length of Extended ORPort connection identifier. */
+#define EXT_OR_CONN_ID_LEN DIGEST_LEN /* 20 */
+
/** Subtype of connection_t for an "OR connection" -- that is, one that speaks
* cells over TLS. */
typedef struct or_connection_t {
@@ -1412,6 +1448,20 @@ typedef struct or_connection_t {
/** Hash of the public RSA key for the other side's identity key, or zeroes
* if the other side hasn't shown us a valid identity key. */
char identity_digest[DIGEST_LEN];
+
+ /** Extended ORPort connection identifier. */
+ char *ext_or_conn_id;
+ /** This is the ClientHash value we expect to receive from the
+ * client during the Extended ORPort authentication protocol. We
+ * compute it upon receiving the ClientNoce from the client, and we
+ * compare it with the acual ClientHash value sent by the
+ * client. */
+ char *ext_or_auth_correct_client_hash;
+ /** String carrying the name of the pluggable transport
+ * (e.g. "obfs2") that is obfuscating this connection. If no
+ * pluggable transports are used, it's NULL. */
+ char *ext_or_transport;
+
char *nickname; /**< Nickname of OR on other side (if any). */
tor_tls_t *tls; /**< TLS connection state. */
@@ -3428,6 +3478,8 @@ typedef struct {
char *User; /**< Name of user to run Tor as. */
char *Group; /**< Name of group to run Tor as. */
config_line_t *ORPort_lines; /**< Ports to listen on for OR connections. */
+ /** Ports to listen on for extended OR connections. */
+ config_line_t *ExtORPort_lines;
/** Ports to listen on for SOCKS connections. */
config_line_t *SocksPort_lines;
/** Ports to listen on for transparent pf/netfilter connections. */
@@ -3463,6 +3515,7 @@ typedef struct {
unsigned int ControlPort_set : 1;
unsigned int DirPort_set : 1;
unsigned int DNSPort_set : 1;
+ unsigned int ExtORPort_set : 1;
/**@}*/
int AssumeReachable; /**< Whether to publish our descriptor regardless. */
@@ -3502,6 +3555,9 @@ typedef struct {
/** List of TCP/IP addresses that transports should listen at. */
config_line_t *ServerTransportListenAddr;
+ /** List of options that must be passed to pluggable transports. */
+ config_line_t *ServerTransportOptions;
+
int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make
* this explicit so we can change how we behave in the
* future. */
@@ -3739,7 +3795,10 @@ typedef struct {
int CookieAuthentication; /**< Boolean: do we enable cookie-based auth for
* the control system? */
- char *CookieAuthFile; /**< Location of a cookie authentication file. */
+ char *CookieAuthFile; /**< Filesystem location of a ControlPort
+ * authentication cookie. */
+ char *ExtORPortCookieAuthFile; /**< Filesystem location of Extended
+ * ORPort authentication cookie. */
int CookieAuthFileGroupReadable; /**< Boolean: Is the CookieAuthFile g+r? */
int LeaveStreamsUnattached; /**< Boolean: Does Tor attach new streams to
* circuits itself (0), or does it expect a controller
@@ -3761,6 +3820,7 @@ typedef struct {
SAFELOG_SCRUB_ALL, SAFELOG_SCRUB_RELAY, SAFELOG_SCRUB_NONE
} SafeLogging_;
+ int Sandbox; /**< Boolean: should sandboxing be enabled? */
int SafeSocks; /**< Boolean: should we outright refuse application
* connections that use socks4 or socks5-with-local-dns? */
#define LOG_PROTOCOL_WARN (get_options()->ProtocolWarnings ? \
@@ -3780,7 +3840,8 @@ typedef struct {
int NumEntryGuards; /**< How many entry guards do we try to establish? */
int UseEntryGuardsAsDirGuards; /** Boolean: Do we try to get directory info
* from a smallish number of fixed nodes? */
- int NumDirectoryGuards; /**< How many dir guards do we try to establish? */
+ int NumDirectoryGuards; /**< How many dir guards do we try to establish?
+ * If 0, use value from NumEntryGuards. */
int RephistTrackTime; /**< How many seconds do we keep rephist info? */
int FastFirstHopPK; /**< If Tor believes it is safe, should we save a third
* of our PK time by sending CREATE_FAST cells? */
diff --git a/src/or/relay.c b/src/or/relay.c
index 2c2a88713..9a0fdd963 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -969,7 +969,7 @@ remap_event_helper(entry_connection_t *conn, const tor_addr_t *new_addr)
* <b>addr_out</b> to the address we're connected to, and <b>ttl_out</b> to
* the ttl of that address, in seconds, and return 0. On failure, return
* -1. */
-int
+STATIC int
connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
tor_addr_t *addr_out, int *ttl_out)
{
@@ -2089,7 +2089,7 @@ packed_cell_free_unchecked(packed_cell_t *cell)
}
/** Allocate and return a new packed_cell_t. */
-static INLINE packed_cell_t *
+STATIC packed_cell_t *
packed_cell_new(void)
{
++total_cells_allocated;
@@ -2100,6 +2100,8 @@ packed_cell_new(void)
void
packed_cell_free(packed_cell_t *cell)
{
+ if (!cell)
+ return;
packed_cell_free_unchecked(cell);
}
@@ -2129,7 +2131,6 @@ packed_cell_copy(const cell_t *cell, int wide_circ_ids)
{
packed_cell_t *c = packed_cell_new();
cell_pack(c, cell, wide_circ_ids);
- c->next = NULL;
return c;
}
@@ -2137,14 +2138,7 @@ packed_cell_copy(const cell_t *cell, int wide_circ_ids)
void
cell_queue_append(cell_queue_t *queue, packed_cell_t *cell)
{
- if (queue->tail) {
- tor_assert(!queue->tail->next);
- queue->tail->next = cell;
- } else {
- queue->head = cell;
- }
- queue->tail = cell;
- cell->next = NULL;
+ TOR_SIMPLEQ_INSERT_TAIL(&queue->head, cell, next);
++queue->n;
}
@@ -2187,18 +2181,24 @@ cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell,
cell_queue_append(queue, copy);
}
+/** Initialize <b>queue</b> as an empty cell queue. */
+void
+cell_queue_init(cell_queue_t *queue)
+{
+ memset(queue, 0, sizeof(cell_queue_t));
+ TOR_SIMPLEQ_INIT(&queue->head);
+}
+
/** Remove and free every cell in <b>queue</b>. */
void
cell_queue_clear(cell_queue_t *queue)
{
- packed_cell_t *cell, *next;
- cell = queue->head;
- while (cell) {
- next = cell->next;
+ packed_cell_t *cell;
+ while ((cell = TOR_SIMPLEQ_FIRST(&queue->head))) {
+ TOR_SIMPLEQ_REMOVE_HEAD(&queue->head, next);
packed_cell_free_unchecked(cell);
- cell = next;
}
- queue->head = queue->tail = NULL;
+ TOR_SIMPLEQ_INIT(&queue->head);
queue->n = 0;
if (queue->insertion_times) {
while (queue->insertion_times->first) {
@@ -2212,17 +2212,13 @@ cell_queue_clear(cell_queue_t *queue)
/** Extract and return the cell at the head of <b>queue</b>; return NULL if
* <b>queue</b> is empty. */
-static INLINE packed_cell_t *
+STATIC packed_cell_t *
cell_queue_pop(cell_queue_t *queue)
{
- packed_cell_t *cell = queue->head;
+ packed_cell_t *cell = TOR_SIMPLEQ_FIRST(&queue->head);
if (!cell)
return NULL;
- queue->head = cell->next;
- if (cell == queue->tail) {
- tor_assert(!queue->head);
- queue->tail = NULL;
- }
+ TOR_SIMPLEQ_REMOVE_HEAD(&queue->head, next);
--queue->n;
return cell;
}
diff --git a/src/or/relay.h b/src/or/relay.h
index 69df7024b..e1b5e381e 100644
--- a/src/or/relay.h
+++ b/src/or/relay.h
@@ -51,6 +51,7 @@ size_t packed_cell_mem_cost(void);
/* For channeltls.c */
void packed_cell_free(packed_cell_t *cell);
+void cell_queue_init(cell_queue_t *queue);
void cell_queue_clear(cell_queue_t *queue);
void cell_queue_append(cell_queue_t *queue, packed_cell_t *cell);
void cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell,
@@ -75,11 +76,14 @@ void circuit_clear_cell_queue(circuit_t *circ, channel_t *chan);
void stream_choice_seed_weak_rng(void);
-#ifdef RELAY_PRIVATE
int relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction,
crypt_path_t **layer_hint, char *recognized);
-int connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
+
+#ifdef RELAY_PRIVATE
+STATIC int connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
tor_addr_t *addr_out, int *ttl_out);
+STATIC packed_cell_t *packed_cell_new(void);
+STATIC packed_cell_t *cell_queue_pop(cell_queue_t *queue);
#endif
#endif
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 7f771918c..fb56dc036 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -1207,7 +1207,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
/* check for replay of PK-encrypted portion. */
replay = replaycache_add_test_and_elapsed(
intro_point->accepted_intro_rsa_parts,
- parsed_req->ciphertext, (int)parsed_req->ciphertext_len,
+ parsed_req->ciphertext, parsed_req->ciphertext_len,
&elapsed);
if (replay) {
@@ -1898,8 +1898,8 @@ rend_service_parse_intro_for_v3(
}
}
- /* Check that we actually have everything up to the timestamp */
- if (plaintext_len < (size_t)(ts_offset)) {
+ /* Check that we actually have everything up through the timestamp */
+ if (plaintext_len < (size_t)(ts_offset)+4) {
if (err_msg_out) {
tor_asprintf(err_msg_out,
"truncated plaintext of encrypted parted of "
@@ -1923,12 +1923,6 @@ rend_service_parse_intro_for_v3(
}
/*
- * Apparently we don't use the timestamp any more, but might as well copy
- * over just in case we ever care about it.
- */
- intro->u.v3.timestamp = ntohl(get_uint32(buf + ts_offset));
-
- /*
* From here on, the format is as in v2, so we call the v2 parser with
* adjusted buffer and length. We are 4 + ts_offset octets in, but the
* v2 parser expects to skip over a version byte at the start, so we
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index ff31ba6ed..caf88a3d6 100644
--- a/src/or/rendservice.h
+++ b/src/or/rendservice.h
@@ -56,8 +56,6 @@ struct rend_intro_cell_s {
uint16_t auth_len;
/* Auth data */
uint8_t *auth_data;
- /* timestamp */
- uint32_t timestamp;
/* Rendezvous point's IP address/port, identity digest and onion key */
extend_info_t *extend_info;
} v3;
diff --git a/src/or/replaycache.c b/src/or/replaycache.c
index 59b98489b..90f87c12d 100644
--- a/src/or/replaycache.c
+++ b/src/or/replaycache.c
@@ -63,9 +63,9 @@ replaycache_new(time_t horizon, time_t interval)
/** See documentation for replaycache_add_and_test()
*/
-int
+STATIC int
replaycache_add_and_test_internal(
- time_t present, replaycache_t *r, const void *data, int len,
+ time_t present, replaycache_t *r, const void *data, size_t len,
time_t *elapsed)
{
int rv = 0;
@@ -73,7 +73,7 @@ replaycache_add_and_test_internal(
time_t *access_time;
/* sanity check */
- if (present <= 0 || !r || !data || len <= 0) {
+ if (present <= 0 || !r || !data || len == 0) {
log_info(LD_BUG, "replaycache_add_and_test_internal() called with stupid"
" parameters; please fix this.");
goto done;
@@ -127,14 +127,13 @@ replaycache_add_and_test_internal(
/** See documentation for replaycache_scrub_if_needed()
*/
-void
+STATIC void
replaycache_scrub_if_needed_internal(time_t present, replaycache_t *r)
{
digestmap_iter_t *itr = NULL;
const char *digest;
void *valp;
time_t *access_time;
- char scrub_this;
/* sanity check */
if (!r || !(r->digests_seen)) {
@@ -152,20 +151,10 @@ replaycache_scrub_if_needed_internal(time_t present, replaycache_t *r)
/* okay, scrub time */
itr = digestmap_iter_init(r->digests_seen);
while (!digestmap_iter_done(itr)) {
- scrub_this = 0;
digestmap_iter_get(itr, &digest, &valp);
access_time = (time_t *)valp;
- if (access_time) {
- /* aged out yet? */
- if (*access_time < present - r->horizon) scrub_this = 1;
- } else {
- /* Buh? Get rid of it, anyway */
- log_info(LD_BUG, "replaycache_scrub_if_needed_internal() saw a NULL"
- " entry in the digestmap.");
- scrub_this = 1;
- }
-
- if (scrub_this) {
+ /* aged out yet? */
+ if (*access_time < present - r->horizon) {
/* Advance the iterator and remove this one */
itr = digestmap_iter_next_rmv(r->digests_seen, itr);
/* Free the value removed */
@@ -187,7 +176,7 @@ replaycache_scrub_if_needed_internal(time_t present, replaycache_t *r)
*/
int
-replaycache_add_and_test(replaycache_t *r, const void *data, int len)
+replaycache_add_and_test(replaycache_t *r, const void *data, size_t len)
{
return replaycache_add_and_test_internal(time(NULL), r, data, len, NULL);
}
@@ -198,7 +187,7 @@ replaycache_add_and_test(replaycache_t *r, const void *data, int len)
int
replaycache_add_test_and_elapsed(
- replaycache_t *r, const void *data, int len, time_t *elapsed)
+ replaycache_t *r, const void *data, size_t len, time_t *elapsed)
{
return replaycache_add_and_test_internal(time(NULL), r, data, len, elapsed);
}
diff --git a/src/or/replaycache.h b/src/or/replaycache.h
index de20cab62..cd713fe89 100644
--- a/src/or/replaycache.h
+++ b/src/or/replaycache.h
@@ -45,10 +45,10 @@ replaycache_t * replaycache_new(time_t horizon, time_t interval);
* testing. For everything else, use the wrappers below instead.
*/
-int replaycache_add_and_test_internal(
- time_t present, replaycache_t *r, const void *data, int len,
+STATIC int replaycache_add_and_test_internal(
+ time_t present, replaycache_t *r, const void *data, size_t len,
time_t *elapsed);
-void replaycache_scrub_if_needed_internal(
+STATIC void replaycache_scrub_if_needed_internal(
time_t present, replaycache_t *r);
#endif /* REPLAYCACHE_PRIVATE */
@@ -57,9 +57,9 @@ void replaycache_scrub_if_needed_internal(
* replaycache_t methods
*/
-int replaycache_add_and_test(replaycache_t *r, const void *data, int len);
+int replaycache_add_and_test(replaycache_t *r, const void *data, size_t len);
int replaycache_add_test_and_elapsed(
- replaycache_t *r, const void *data, int len, time_t *elapsed);
+ replaycache_t *r, const void *data, size_t len, time_t *elapsed);
void replaycache_scrub_if_needed(replaycache_t *r);
#endif
diff --git a/src/or/router.c b/src/or/router.c
index 6069da8f0..1063eda04 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -2249,7 +2249,7 @@ router_guess_address_from_dir_headers(uint32_t *guess)
* string describing the version of Tor and the operating system we're
* currently running on.
*/
-void
+STATIC void
get_platform_str(char *platform, size_t len)
{
tor_snprintf(platform, len, "Tor %s on %s",
diff --git a/src/or/router.h b/src/or/router.h
index 60095d087..1079ec78c 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -12,6 +12,8 @@
#ifndef TOR_ROUTER_H
#define TOR_ROUTER_H
+#include "testsupport.h"
+
crypto_pk_t *get_onion_key(void);
time_t get_onion_key_set_at(void);
void set_server_identity_key(crypto_pk_t *k);
@@ -146,7 +148,7 @@ smartlist_t *router_get_all_orports(const routerinfo_t *ri);
#ifdef ROUTER_PRIVATE
/* Used only by router.c and test.c */
-void get_platform_str(char *platform, size_t len);
+STATIC void get_platform_str(char *platform, size_t len);
#endif
#endif
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index a145ba716..46da17e03 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1801,7 +1801,7 @@ router_get_advertised_bandwidth_capped(const routerinfo_t *router)
* doubles, convert them to uint64_t, and try to scale them linearly so as to
* much of the range of uint64_t. If <b>total_out</b> is provided, set it to
* the sum of all elements in the array _before_ scaling. */
-/* private */ void
+STATIC void
scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
uint64_t *total_out)
{
@@ -1844,7 +1844,7 @@ gt_i64_timei(uint64_t a, uint64_t b)
* value, and return the index of that element. If all elements are 0, choose
* an index at random. Return -1 on error.
*/
-/* private */ int
+STATIC int
choose_array_element_by_weight(const u64_dbl_t *entries, int n_entries)
{
int i, i_chosen=-1, n_chosen=0;
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index ce0f0f2e3..0162297ca 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -11,6 +11,8 @@
#ifndef TOR_ROUTERLIST_H
#define TOR_ROUTERLIST_H
+#include "testsupport.h"
+
int get_n_authorities(dirinfo_type_t type);
int trusted_dirs_reload_certs(void);
@@ -206,9 +208,10 @@ typedef union u64_dbl_t {
double dbl;
} u64_dbl_t;
-int choose_array_element_by_weight(const u64_dbl_t *entries, int n_entries);
-void scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
- uint64_t *total_out);
+STATIC int choose_array_element_by_weight(const u64_dbl_t *entries,
+ int n_entries);
+STATIC void scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
+ uint64_t *total_out);
#endif
#endif
diff --git a/src/or/statefile.c b/src/or/statefile.c
index bcb7b0741..8736c35a2 100644
--- a/src/or/statefile.c
+++ b/src/or/statefile.c
@@ -4,6 +4,7 @@
* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+#define STATEFILE_PRIVATE
#include "or.h"
#include "circuitstats.h"
#include "config.h"
@@ -117,8 +118,8 @@ static const config_format_t state_format = {
static or_state_t *global_state = NULL;
/** Return the persistent state struct for this Tor. */
-or_state_t *
-get_or_state(void)
+MOCK_IMPL(or_state_t *,
+get_or_state, (void))
{
tor_assert(global_state);
return global_state;
@@ -449,7 +450,7 @@ or_state_save(time_t now)
/** Return the config line for transport <b>transport</b> in the current state.
* Return NULL if there is no config line for <b>transport</b>. */
-static config_line_t *
+STATIC config_line_t *
get_transport_in_state_by_name(const char *transport)
{
or_state_t *or_state = get_or_state();
diff --git a/src/or/statefile.h b/src/or/statefile.h
index dcdee6c60..c1413ff95 100644
--- a/src/or/statefile.h
+++ b/src/or/statefile.h
@@ -7,7 +7,7 @@
#ifndef TOR_STATEFILE_H
#define TOR_STATEFILE_H
-or_state_t *get_or_state(void);
+MOCK_DECL(or_state_t *,get_or_state,(void));
int did_last_state_file_write_fail(void);
int or_state_save(time_t now);
@@ -18,5 +18,9 @@ int or_state_load(void);
int or_state_loaded(void);
void or_state_free_all(void);
+#ifdef STATEFILE_PRIVATE
+STATIC config_line_t *get_transport_in_state_by_name(const char *transport);
+#endif
+
#endif
diff --git a/src/or/transports.c b/src/or/transports.c
index 0afba24ea..f6bbbe81c 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -96,18 +96,15 @@
#include "router.h"
#include "statefile.h"
#include "entrynodes.h"
+#include "connection_or.h"
+#include "ext_orport.h"
static process_environment_t *
create_managed_proxy_environment(const managed_proxy_t *mp);
static INLINE int proxy_configuration_finished(const managed_proxy_t *mp);
-static void managed_proxy_destroy(managed_proxy_t *mp,
- int also_terminate_process);
-
static void handle_finished_proxy(managed_proxy_t *mp);
-static void configure_proxy(managed_proxy_t *mp);
-
static void parse_method_error(const char *line, int is_server_method);
#define parse_server_method_error(l) parse_method_error(l, 1)
#define parse_client_method_error(l) parse_method_error(l, 0)
@@ -137,7 +134,8 @@ static smartlist_t *transport_list = NULL;
SOCKS version <b>socks_ver</b>. */
static transport_t *
transport_new(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver)
+ const char *name, int socks_ver,
+ const char *extra_info_args)
{
transport_t *t = tor_malloc_zero(sizeof(transport_t));
@@ -145,6 +143,8 @@ transport_new(const tor_addr_t *addr, uint16_t port,
t->port = port;
t->name = tor_strdup(name);
t->socks_version = socks_ver;
+ if (extra_info_args)
+ t->extra_info_args = tor_strdup(extra_info_args);
return t;
}
@@ -157,6 +157,7 @@ transport_free(transport_t *transport)
return;
tor_free(transport->name);
+ tor_free(transport->extra_info_args);
tor_free(transport);
}
@@ -324,7 +325,7 @@ int
transport_add_from_config(const tor_addr_t *addr, uint16_t port,
const char *name, int socks_ver)
{
- transport_t *t = transport_new(addr, port, name, socks_ver);
+ transport_t *t = transport_new(addr, port, name, socks_ver, NULL);
int r = transport_add(t);
@@ -573,10 +574,8 @@ pt_configure_remaining_proxies(void)
/* If the proxy is not fully configured, try to configure it
futher. */
if (!proxy_configuration_finished(mp))
- configure_proxy(mp);
-
- if (proxy_configuration_finished(mp))
- at_least_a_proxy_config_finished = 1;
+ if (configure_proxy(mp) == 1)
+ at_least_a_proxy_config_finished = 1;
} SMARTLIST_FOREACH_END(mp);
@@ -588,10 +587,14 @@ pt_configure_remaining_proxies(void)
mark_my_descriptor_dirty("configured managed proxies");
}
-/** Attempt to continue configuring managed proxy <b>mp</b>. */
-static void
+/** Attempt to continue configuring managed proxy <b>mp</b>.
+ * Return 1 if the transport configuration finished, and return 0
+ * otherwise (if we still have more configuring to do for this
+ * proxy). */
+STATIC int
configure_proxy(managed_proxy_t *mp)
{
+ int configuration_finished = 0;
smartlist_t *proxy_output = NULL;
enum stream_status stream_status = 0;
@@ -601,7 +604,7 @@ configure_proxy(managed_proxy_t *mp)
mp->conf_state = PT_PROTO_FAILED_LAUNCH;
handle_finished_proxy(mp);
}
- return;
+ return 0;
}
tor_assert(mp->conf_state != PT_PROTO_INFANT);
@@ -633,13 +636,17 @@ configure_proxy(managed_proxy_t *mp)
done:
/* if the proxy finished configuring, exit the loop. */
- if (proxy_configuration_finished(mp))
+ if (proxy_configuration_finished(mp)) {
handle_finished_proxy(mp);
+ configuration_finished = 1;
+ }
if (proxy_output) {
SMARTLIST_FOREACH(proxy_output, char *, cp, tor_free(cp));
smartlist_free(proxy_output);
}
+
+ return configuration_finished;
}
/** Register server managed proxy <b>mp</b> transports to state */
@@ -694,7 +701,7 @@ register_proxy(const managed_proxy_t *mp)
}
/** Free memory allocated by managed proxy <b>mp</b>. */
-static void
+STATIC void
managed_proxy_destroy(managed_proxy_t *mp,
int also_terminate_process)
{
@@ -708,7 +715,8 @@ managed_proxy_destroy(managed_proxy_t *mp,
smartlist_free(mp->transports_to_launch);
/* remove it from the list of managed proxies */
- smartlist_remove(managed_proxy_list, mp);
+ if (managed_proxy_list)
+ smartlist_remove(managed_proxy_list, mp);
/* free the argv */
free_execve_args(mp->argv);
@@ -745,7 +753,6 @@ handle_finished_proxy(managed_proxy_t *mp)
}
unconfigured_proxies_n--;
- tor_assert(unconfigured_proxies_n >= 0);
}
/** Return true if the configuration of the managed proxy <b>mp</b> is
@@ -776,7 +783,7 @@ handle_methods_done(const managed_proxy_t *mp)
/** Handle a configuration protocol <b>line</b> received from a
* managed proxy <b>mp</b>. */
-void
+STATIC void
handle_proxy_line(const char *line, managed_proxy_t *mp)
{
log_info(LD_GENERAL, "Got a line from managed proxy '%s': (%s)",
@@ -877,7 +884,7 @@ handle_proxy_line(const char *line, managed_proxy_t *mp)
}
/** Parses an ENV-ERROR <b>line</b> and warns the user accordingly. */
-void
+STATIC void
parse_env_error(const char *line)
{
/* (Length of the protocol string) plus (a space) and (the first char of
@@ -893,7 +900,7 @@ parse_env_error(const char *line)
/** Handles a VERSION <b>line</b>. Updates the configuration protocol
* version in <b>mp</b>. */
-int
+STATIC int
parse_version(const char *line, managed_proxy_t *mp)
{
if (strlen(line) < (strlen(PROTO_NEG_SUCCESS) + 2)) {
@@ -934,14 +941,14 @@ parse_method_error(const char *line, int is_server)
/** Parses an SMETHOD <b>line</b> and if well-formed it registers the
* new transport in <b>mp</b>. */
-int
+STATIC int
parse_smethod_line(const char *line, managed_proxy_t *mp)
{
int r;
smartlist_t *items = NULL;
char *method_name=NULL;
-
+ char *args_string=NULL;
char *addrport=NULL;
tor_addr_t tor_addr;
char *address=NULL;
@@ -958,6 +965,9 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
goto err;
}
+ /* Example of legit SMETHOD line:
+ SMETHOD obfs2 0.0.0.0:25612 ARGS:secret=supersekrit,key=superkey */
+
tor_assert(!strcmp(smartlist_get(items,0),PROTO_SMETHOD));
method_name = smartlist_get(items,1);
@@ -985,7 +995,19 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
goto err;
}
- transport = transport_new(&tor_addr, port, method_name, PROXY_NONE);
+ if (smartlist_len(items) > 3) {
+ /* Seems like there are also some [options] in the SMETHOD line.
+ Let's see if we can parse them. */
+ char *options_string = smartlist_get(items, 3);
+ log_debug(LD_CONFIG, "Got options_string: %s", options_string);
+ if (!strcmpstart(options_string, "ARGS:")) {
+ args_string = options_string+strlen("ARGS:");
+ log_debug(LD_CONFIG, "Got ARGS: %s", args_string);
+ }
+ }
+
+ transport = transport_new(&tor_addr, port, method_name,
+ PROXY_NONE, args_string);
if (!transport)
goto err;
@@ -1011,7 +1033,7 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
/** Parses a CMETHOD <b>line</b>, and if well-formed it registers
* the new transport in <b>mp</b>. */
-int
+STATIC int
parse_cmethod_line(const char *line, managed_proxy_t *mp)
{
int r;
@@ -1077,7 +1099,7 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
goto err;
}
- transport = transport_new(&tor_addr, port, method_name, socks_ver);
+ transport = transport_new(&tor_addr, port, method_name, socks_ver, NULL);
if (!transport)
goto err;
@@ -1100,6 +1122,50 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
return r;
}
+/** Return a newly allocated string that tor should place in
+ * TOR_PT_SERVER_TRANSPORT_OPTIONS while configuring the server
+ * manged proxy in <b>mp</b>. Return NULL if no such options are found. */
+STATIC char *
+get_transport_options_for_server_proxy(const managed_proxy_t *mp)
+{
+ char *options_string = NULL;
+ smartlist_t *string_sl = smartlist_new();
+
+ tor_assert(mp->is_server);
+
+ /** Loop over the transports of the proxy. If we have options for
+ any of them, format them appropriately and place them in our
+ smartlist. Finally, join our smartlist to get the final
+ string. */
+ SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, const char *, transport) {
+ smartlist_t *options_tmp_sl = NULL;
+ options_tmp_sl = get_options_for_server_transport(transport);
+ if (!options_tmp_sl)
+ continue;
+
+ /** Loop over the options of this transport, escape them, and
+ place them in the smartlist. */
+ SMARTLIST_FOREACH_BEGIN(options_tmp_sl, const char *, options) {
+ char *escaped_opts = tor_escape_str_for_pt_args(options, ":;\\");
+ smartlist_add_asprintf(string_sl, "%s:%s",
+ transport, escaped_opts);
+ tor_free(escaped_opts);
+ } SMARTLIST_FOREACH_END(options);
+
+ SMARTLIST_FOREACH(options_tmp_sl, char *, c, tor_free(c));
+ smartlist_free(options_tmp_sl);
+ } SMARTLIST_FOREACH_END(transport);
+
+ if (smartlist_len(string_sl)) {
+ options_string = smartlist_join_strings(string_sl, ";", 0, NULL);
+ }
+
+ SMARTLIST_FOREACH(string_sl, char *, t, tor_free(t));
+ smartlist_free(string_sl);
+
+ return options_string;
+}
+
/** Return the string that tor should place in TOR_PT_SERVER_BINDADDR
* while configuring the server managed proxy in <b>mp</b>. The
* string is stored in the heap, and it's the the responsibility of
@@ -1134,6 +1200,8 @@ get_bindaddr_for_server_proxy(const managed_proxy_t *mp)
static process_environment_t *
create_managed_proxy_environment(const managed_proxy_t *mp)
{
+ const or_options_t *options = get_options();
+
/* Environment variables to be added to or set in mp's environment. */
smartlist_t *envs = smartlist_new();
/* XXXX The next time someone touches this code, shorten the name of
@@ -1181,13 +1249,39 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
tor_free(bindaddr_tmp);
}
+ {
+ char *server_transport_options =
+ get_transport_options_for_server_proxy(mp);
+ if (server_transport_options) {
+ smartlist_add_asprintf(envs, "TOR_PT_SERVER_TRANSPORT_OPTIONS=%s",
+ server_transport_options);
+ tor_free(server_transport_options);
+ }
+ }
+
/* XXX024 Remove the '=' here once versions of obfsproxy which
* assert that this env var exists are sufficiently dead.
*
* (If we remove this line entirely, some joker will stick this
* variable in Tor's environment and crash PTs that try to parse
* it even when not run in server mode.) */
- smartlist_add(envs, tor_strdup("TOR_PT_EXTENDED_SERVER_PORT="));
+
+ if (options->ExtORPort_lines) {
+ char *ext_or_addrport_tmp =
+ get_first_listener_addrport_string(CONN_TYPE_EXT_OR_LISTENER);
+ char *cookie_file_loc = get_ext_or_auth_cookie_file_name();
+
+ smartlist_add_asprintf(envs, "TOR_PT_EXTENDED_SERVER_PORT=%s",
+ ext_or_addrport_tmp);
+ smartlist_add_asprintf(envs, "TOR_PT_AUTH_COOKIE_FILE=%s",
+ cookie_file_loc);
+
+ tor_free(ext_or_addrport_tmp);
+ tor_free(cookie_file_loc);
+
+ } else {
+ smartlist_add_asprintf(envs, "TOR_PT_EXTENDED_SERVER_PORT=");
+ }
}
SMARTLIST_FOREACH_BEGIN(envs, const char *, env_var) {
@@ -1211,7 +1305,7 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
* <b>proxy_argv</b>.
*
* Requires that proxy_argv have at least one element. */
-static managed_proxy_t *
+STATIC managed_proxy_t *
managed_proxy_create(const smartlist_t *transport_list,
char **proxy_argv, int is_server)
{
@@ -1385,6 +1479,8 @@ pt_get_extra_info_descriptor_string(void)
tor_assert(mp->transports);
SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
+ char *transport_args = NULL;
+
/* If the transport proxy returned "0.0.0.0" as its address, and
* we know our external IP address, use it. Otherwise, use the
* returned address. */
@@ -1400,9 +1496,16 @@ pt_get_extra_info_descriptor_string(void)
addrport = fmt_addrport(&t->addr, t->port);
}
+ /* If this transport has any arguments with it, prepend a space
+ to them so that we can add them to the transport line. */
+ if (t->extra_info_args)
+ tor_asprintf(&transport_args, " %s", t->extra_info_args);
+
smartlist_add_asprintf(string_chunks,
- "transport %s %s",
- t->name, addrport);
+ "transport %s %s%s",
+ t->name, addrport,
+ transport_args ? transport_args : "");
+ tor_free(transport_args);
} SMARTLIST_FOREACH_END(t);
} SMARTLIST_FOREACH_END(mp);
@@ -1440,7 +1543,7 @@ pt_stringify_socks_args(const smartlist_t *socks_args)
SMARTLIST_FOREACH_BEGIN(socks_args, const char *, s) {
/* Escape ';' and '\'. */
- escaped_string = tor_escape_str_for_socks_arg(s);
+ escaped_string = tor_escape_str_for_pt_args(s, ";\\");
if (!escaped_string)
goto done;
diff --git a/src/or/transports.h b/src/or/transports.h
index 4a5498cb5..7b524f207 100644
--- a/src/or/transports.h
+++ b/src/or/transports.h
@@ -25,6 +25,9 @@ typedef struct transport_t {
/** Boolean: We are re-parsing our transport list, and we are going to remove
* this one if we don't find it in the list of configured transports. */
unsigned marked_for_removal : 1;
+ /** Arguments for this transport that must be written to the
+ extra-info descriptor. */
+ char *extra_info_args;
} transport_t;
void mark_transport_list(void);
@@ -104,12 +107,21 @@ typedef struct {
smartlist_t *transports;
} managed_proxy_t;
-int parse_cmethod_line(const char *line, managed_proxy_t *mp);
-int parse_smethod_line(const char *line, managed_proxy_t *mp);
+STATIC int parse_cmethod_line(const char *line, managed_proxy_t *mp);
+STATIC int parse_smethod_line(const char *line, managed_proxy_t *mp);
-int parse_version(const char *line, managed_proxy_t *mp);
-void parse_env_error(const char *line);
-void handle_proxy_line(const char *line, managed_proxy_t *mp);
+STATIC int parse_version(const char *line, managed_proxy_t *mp);
+STATIC void parse_env_error(const char *line);
+STATIC void handle_proxy_line(const char *line, managed_proxy_t *mp);
+STATIC char *get_transport_options_for_server_proxy(const managed_proxy_t *mp);
+
+STATIC void managed_proxy_destroy(managed_proxy_t *mp,
+ int also_terminate_process);
+
+STATIC managed_proxy_t *managed_proxy_create(const smartlist_t *transport_list,
+ char **proxy_argv, int is_server);
+
+STATIC int configure_proxy(managed_proxy_t *mp);
#endif
diff --git a/src/test/bench.c b/src/test/bench.c
index 97a7909fc..ca01d3c3e 100644
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@ -15,7 +15,6 @@ const char tor_git_revision[] = "";
#include "orconfig.h"
#define RELAY_PRIVATE
-#define CONFIG_PRIVATE
#include "or.h"
#include "onion_tap.h"
diff --git a/src/test/include.am b/src/test/include.am
index 112d1a79d..e3f2795f2 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -1,11 +1,15 @@
TESTS+= src/test/test
-noinst_PROGRAMS+= src/test/test src/test/test-child src/test/bench
+noinst_PROGRAMS+= src/test/bench
+if UNITTESTS_ENABLED
+noinst_PROGRAMS+= src/test/test src/test/test-child
+endif
src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
-DLOCALSTATEDIR="\"$(localstatedir)\"" \
-DBINDIR="\"$(bindir)\"" \
- -I"$(top_srcdir)/src/or" -I"$(top_srcdir)/src/ext"
+ -I"$(top_srcdir)/src/or" -I"$(top_srcdir)/src/ext" \
+ -DTOR_UNIT_TESTS
# -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
@@ -14,19 +18,28 @@ src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
src_test_test_SOURCES = \
src/test/test.c \
src/test/test_addr.c \
+ src/test/test_buffers.c \
src/test/test_cell_formats.c \
+ src/test/test_circuitlist.c \
+ src/test/test_circuitmux.c \
src/test/test_containers.c \
src/test/test_crypto.c \
+ src/test/test_cell_queue.c \
src/test/test_data.c \
src/test/test_dir.c \
+ src/test/test_extorport.c \
src/test/test_introduce.c \
src/test/test_microdesc.c \
+ src/test/test_options.c \
src/test/test_pt.c \
src/test/test_replay.c \
+ src/test/test_socks.c \
src/test/test_util.c \
src/test/test_config.c \
src/ext/tinytest.c
+src_test_test_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
src_test_test_CPPFLAGS= $(src_test_AM_CPPFLAGS)
src_test_bench_SOURCES = \
@@ -36,9 +49,9 @@ src_test_bench_CPPFLAGS= $(src_test_AM_CPPFLAGS)
src_test_test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
@TOR_LDFLAGS_libevent@
-src_test_test_LDADD = src/or/libtor.a src/common/libor.a \
- src/common/libor-crypto.a $(LIBDONNA) \
- src/common/libor-event.a \
+src_test_test_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
+ src/common/libor-crypto-testing.a $(LIBDONNA) \
+ src/common/libor-event-testing.a \
@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
diff --git a/src/test/test-network.sh b/src/test/test-network.sh
new file mode 100755
index 000000000..9146ae3ce
--- /dev/null
+++ b/src/test/test-network.sh
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+# NOTE: Requires Chutney in $CHUTNEY_PATH.
+
+TOR_DIR=$(pwd)/src/or
+NETWORK_FLAVOUR=basic
+CHUTNEY_NETWORK=networks/$NETWORK_FLAVOUR
+myname=$(basename $0)
+
+[ -d "$CHUTNEY_PATH" ] && [ -x "$CHUTNEY_PATH/chutney" ] || {
+ echo "$myname: missing 'chutney' in CHUTNEY_PATH ($CHUTNEY_PATH)"
+ exit 1
+}
+cd "$CHUTNEY_PATH"
+PATH=$TOR_DIR:$PATH # For picking up the right tor binary.
+./tools/bootstrap-network.sh $NETWORK_FLAVOUR || exit 2
+
+# Sleep some, waiting for the network to bootstrap.
+# TODO: Add chutney command 'bootstrap-status' and use that instead.
+BOOTSTRAP_TIME=18
+echo -n "$myname: sleeping for $BOOTSTRAP_TIME seconds"
+n=$BOOTSTRAP_TIME; while [ $n -gt 0 ]; do
+ sleep 1; n=$(expr $n - 1); echo -n .
+done; echo ""
+./chutney verify $CHUTNEY_NETWORK
diff --git a/src/test/test.c b/src/test/test.c
index a9cf899a0..f89556356 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -28,8 +28,6 @@ const char tor_git_revision[] = "";
/* These macros pull in declarations for some functions and structures that
* are typically file-private. */
-#define BUFFERS_PRIVATE
-#define CONFIG_PRIVATE
#define GEOIP_PRIVATE
#define ROUTER_PRIVATE
#define CIRCUITSTATS_PRIVATE
@@ -43,7 +41,6 @@ long int lround(double x);
double fabs(double x);
#include "or.h"
-#include "buffers.h"
#include "circuitstats.h"
#include "config.h"
#include "connection_edge.h"
@@ -216,622 +213,6 @@ free_pregenerated_keys(void)
}
}
-typedef struct socks_test_data_t {
- socks_request_t *req;
- buf_t *buf;
-} socks_test_data_t;
-
-static void *
-socks_test_setup(const struct testcase_t *testcase)
-{
- socks_test_data_t *data = tor_malloc(sizeof(socks_test_data_t));
- (void)testcase;
- data->buf = buf_new_with_capacity(256);
- data->req = socks_request_new();
- config_register_addressmaps(get_options());
- return data;
-}
-static int
-socks_test_cleanup(const struct testcase_t *testcase, void *ptr)
-{
- socks_test_data_t *data = ptr;
- (void)testcase;
- buf_free(data->buf);
- socks_request_free(data->req);
- tor_free(data);
- return 1;
-}
-
-const struct testcase_setup_t socks_setup = {
- socks_test_setup, socks_test_cleanup
-};
-
-#define SOCKS_TEST_INIT() \
- socks_test_data_t *testdata = ptr; \
- buf_t *buf = testdata->buf; \
- socks_request_t *socks = testdata->req;
-#define ADD_DATA(buf, s) \
- write_to_buf(s, sizeof(s)-1, buf)
-
-static void
-socks_request_clear(socks_request_t *socks)
-{
- tor_free(socks->username);
- tor_free(socks->password);
- memset(socks, 0, sizeof(socks_request_t));
-}
-
-/** Perform unsupported SOCKS 4 commands */
-static void
-test_socks_4_unsupported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */
- ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == -1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
-
- done:
- ;
-}
-
-/** Perform supported SOCKS 4 commands */
-static void
-test_socks_4_supported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- test_eq(0, buf_datalen(buf));
-
- /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */
- ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
- test_eq(SOCKS_COMMAND_CONNECT, socks->command);
- test_streq("2.2.2.3", socks->address);
- test_eq(4370, socks->port);
- test_assert(socks->got_auth == 0);
- test_assert(! socks->username);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/
- ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
- test_eq(SOCKS_COMMAND_CONNECT, socks->command);
- test_streq("2.2.2.4", socks->address);
- test_eq(4370, socks->port);
- test_assert(socks->got_auth == 1);
- test_assert(socks->username);
- test_eq(2, socks->usernamelen);
- test_memeq("me", socks->username, 2);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */
- ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(4, socks->socks_version);
- test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
- test_streq("torproject.org", socks->address);
-
- test_eq(0, buf_datalen(buf));
-
- done:
- ;
-}
-
-/** Perform unsupported SOCKS 5 commands */
-static void
-test_socks_5_unsupported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Send unsupported BIND [02] command */
- ADD_DATA(buf, "\x05\x02\x00\x01");
-
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 0);
- test_eq(0, buf_datalen(buf));
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), -1);
- /* XXX: shouldn't tor reply 'command not supported' [07]? */
-
- buf_clear(buf);
- socks_request_clear(socks);
-
- /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
- ADD_DATA(buf, "\x05\x03\x00\x01\x02");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 0);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(2, socks->reply[1]);
- ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), -1);
- /* XXX: shouldn't tor reply 'command not supported' [07]? */
-
- done:
- ;
-}
-
-/** Perform supported SOCKS 5 commands */
-static void
-test_socks_5_supported_commands(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
- ADD_DATA(buf, "\x05\x01\x00");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 0);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 1);
- test_streq("2.2.2.2", socks->address);
- test_eq(4369, socks->port);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */
- ADD_DATA(buf, "\x05\x01\x00");
- ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11");
- test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks), 1);
-
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- test_streq("torproject.org", socks->address);
- test_eq(4369, socks->port);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
- ADD_DATA(buf, "\x05\x01\x00");
- ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- test_streq("torproject.org", socks->address);
-
- test_eq(0, buf_datalen(buf));
- socks_request_clear(socks);
-
- /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
- ADD_DATA(buf, "\x05\x01\x00");
- ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
- test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
- test_streq("2.2.2.5", socks->address);
-
- test_eq(0, buf_datalen(buf));
-
- done:
- ;
-}
-
-/** Perform SOCKS 5 authentication */
-static void
-test_socks_5_no_authenticate(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /*SOCKS 5 No Authentication */
- ADD_DATA(buf,"\x05\x01\x00");
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(SOCKS_NO_AUTH, socks->reply[1]);
-
- test_eq(0, buf_datalen(buf));
-
- /*SOCKS 5 Send username/password anyway - pretend to be broken */
- ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(1, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- test_eq(2, socks->usernamelen);
- test_eq(2, socks->passwordlen);
-
- test_memeq("\x01\x01", socks->username, 2);
- test_memeq("\x01\x01", socks->password, 2);
-
- done:
- ;
-}
-
-/** Perform SOCKS 5 authentication */
-static void
-test_socks_5_authenticate(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Negotiate username/password authentication */
- ADD_DATA(buf, "\x05\x01\x02");
-
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(SOCKS_USER_PASS, socks->reply[1]);
- test_eq(5, socks->socks_version);
-
- test_eq(0, buf_datalen(buf));
-
- /* SOCKS 5 Send username/password */
- ADD_DATA(buf, "\x01\x02me\x08mypasswd");
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(1, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- test_eq(2, socks->usernamelen);
- test_eq(8, socks->passwordlen);
-
- test_memeq("me", socks->username, 2);
- test_memeq("mypasswd", socks->password, 8);
-
- done:
- ;
-}
-
-/** Perform SOCKS 5 authentication and send data all in one go */
-static void
-test_socks_5_authenticate_with_data(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Negotiate username/password authentication */
- ADD_DATA(buf, "\x05\x01\x02");
-
- test_assert(!fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks));
- test_eq(2, socks->replylen);
- test_eq(5, socks->reply[0]);
- test_eq(SOCKS_USER_PASS, socks->reply[1]);
- test_eq(5, socks->socks_version);
-
- test_eq(0, buf_datalen(buf));
-
- /* SOCKS 5 Send username/password */
- /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
- ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
- test_assert(fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks) == 1);
- test_eq(5, socks->socks_version);
- test_eq(2, socks->replylen);
- test_eq(1, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- test_streq("2.2.2.2", socks->address);
- test_eq(4369, socks->port);
-
- test_eq(2, socks->usernamelen);
- test_eq(3, socks->passwordlen);
- test_memeq("me", socks->username, 2);
- test_memeq("you", socks->password, 3);
-
- done:
- ;
-}
-
-/** Perform SOCKS 5 authentication before method negotiated */
-static void
-test_socks_5_auth_before_negotiation(void *ptr)
-{
- SOCKS_TEST_INIT();
-
- /* SOCKS 5 Send username/password */
- ADD_DATA(buf, "\x01\x02me\x02me");
- test_assert(fetch_from_buf_socks(buf, socks,
- get_options()->TestSocks,
- get_options()->SafeSocks) == -1);
- test_eq(0, socks->socks_version);
- test_eq(0, socks->replylen);
- test_eq(0, socks->reply[0]);
- test_eq(0, socks->reply[1]);
-
- done:
- ;
-}
-
-static void
-test_buffer_copy(void *arg)
-{
- generic_buffer_t *buf=NULL, *buf2=NULL;
- const char *s;
- size_t len;
- char b[256];
- int i;
- (void)arg;
-
- buf = generic_buffer_new();
- tt_assert(buf);
-
- /* Copy an empty buffer. */
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_assert(buf2);
- tt_int_op(0, ==, generic_buffer_len(buf2));
-
- /* Now try with a short buffer. */
- s = "And now comes an act of enormous enormance!";
- len = strlen(s);
- generic_buffer_add(buf, s, len);
- tt_int_op(len, ==, generic_buffer_len(buf));
- /* Add junk to buf2 so we can test replacing.*/
- generic_buffer_add(buf2, "BLARG", 5);
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_int_op(len, ==, generic_buffer_len(buf2));
- generic_buffer_get(buf2, b, len);
- test_mem_op(b, ==, s, len);
- /* Now free buf2 and retry so we can test allocating */
- generic_buffer_free(buf2);
- buf2 = NULL;
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_int_op(len, ==, generic_buffer_len(buf2));
- generic_buffer_get(buf2, b, len);
- test_mem_op(b, ==, s, len);
- /* Clear buf for next test */
- generic_buffer_get(buf, b, len);
- tt_int_op(generic_buffer_len(buf),==,0);
-
- /* Okay, now let's try a bigger buffer. */
- s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit "
- "esse quam nihil molestiae consequatur, vel illum qui dolorem eum "
- "fugiat quo voluptas nulla pariatur?";
- len = strlen(s);
- for (i = 0; i < 256; ++i) {
- b[0]=i;
- generic_buffer_add(buf, b, 1);
- generic_buffer_add(buf, s, len);
- }
- tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
- tt_int_op(generic_buffer_len(buf2), ==, generic_buffer_len(buf));
- for (i = 0; i < 256; ++i) {
- generic_buffer_get(buf2, b, len+1);
- tt_int_op((unsigned char)b[0],==,i);
- test_mem_op(b+1, ==, s, len);
- }
-
- done:
- if (buf)
- generic_buffer_free(buf);
- if (buf2)
- generic_buffer_free(buf2);
-}
-
-/** Run unit tests for buffers.c */
-static void
-test_buffers(void)
-{
- char str[256];
- char str2[256];
-
- buf_t *buf = NULL, *buf2 = NULL;
- const char *cp;
-
- int j;
- size_t r;
-
- /****
- * buf_new
- ****/
- if (!(buf = buf_new()))
- test_fail();
-
- //test_eq(buf_capacity(buf), 4096);
- test_eq(buf_datalen(buf), 0);
-
- /****
- * General pointer frobbing
- */
- for (j=0;j<256;++j) {
- str[j] = (char)j;
- }
- write_to_buf(str, 256, buf);
- write_to_buf(str, 256, buf);
- test_eq(buf_datalen(buf), 512);
- fetch_from_buf(str2, 200, buf);
- test_memeq(str, str2, 200);
- test_eq(buf_datalen(buf), 312);
- memset(str2, 0, sizeof(str2));
-
- fetch_from_buf(str2, 256, buf);
- test_memeq(str+200, str2, 56);
- test_memeq(str, str2+56, 200);
- test_eq(buf_datalen(buf), 56);
- memset(str2, 0, sizeof(str2));
- /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add
- * another 3584 bytes, we hit the end. */
- for (j=0;j<15;++j) {
- write_to_buf(str, 256, buf);
- }
- assert_buf_ok(buf);
- test_eq(buf_datalen(buf), 3896);
- fetch_from_buf(str2, 56, buf);
- test_eq(buf_datalen(buf), 3840);
- test_memeq(str+200, str2, 56);
- for (j=0;j<15;++j) {
- memset(str2, 0, sizeof(str2));
- fetch_from_buf(str2, 256, buf);
- test_memeq(str, str2, 256);
- }
- test_eq(buf_datalen(buf), 0);
- buf_free(buf);
- buf = NULL;
-
- /* Okay, now make sure growing can work. */
- buf = buf_new_with_capacity(16);
- //test_eq(buf_capacity(buf), 16);
- write_to_buf(str+1, 255, buf);
- //test_eq(buf_capacity(buf), 256);
- fetch_from_buf(str2, 254, buf);
- test_memeq(str+1, str2, 254);
- //test_eq(buf_capacity(buf), 256);
- assert_buf_ok(buf);
- write_to_buf(str, 32, buf);
- //test_eq(buf_capacity(buf), 256);
- assert_buf_ok(buf);
- write_to_buf(str, 256, buf);
- assert_buf_ok(buf);
- //test_eq(buf_capacity(buf), 512);
- test_eq(buf_datalen(buf), 33+256);
- fetch_from_buf(str2, 33, buf);
- test_eq(*str2, str[255]);
-
- test_memeq(str2+1, str, 32);
- //test_eq(buf_capacity(buf), 512);
- test_eq(buf_datalen(buf), 256);
- fetch_from_buf(str2, 256, buf);
- test_memeq(str, str2, 256);
-
- /* now try shrinking: case 1. */
- buf_free(buf);
- buf = buf_new_with_capacity(33668);
- for (j=0;j<67;++j) {
- write_to_buf(str,255, buf);
- }
- //test_eq(buf_capacity(buf), 33668);
- test_eq(buf_datalen(buf), 17085);
- for (j=0; j < 40; ++j) {
- fetch_from_buf(str2, 255,buf);
- test_memeq(str2, str, 255);
- }
-
- /* now try shrinking: case 2. */
- buf_free(buf);
- buf = buf_new_with_capacity(33668);
- for (j=0;j<67;++j) {
- write_to_buf(str,255, buf);
- }
- for (j=0; j < 20; ++j) {
- fetch_from_buf(str2, 255,buf);
- test_memeq(str2, str, 255);
- }
- for (j=0;j<80;++j) {
- write_to_buf(str,255, buf);
- }
- //test_eq(buf_capacity(buf),33668);
- for (j=0; j < 120; ++j) {
- fetch_from_buf(str2, 255,buf);
- test_memeq(str2, str, 255);
- }
-
- /* Move from buf to buf. */
- buf_free(buf);
- buf = buf_new_with_capacity(4096);
- buf2 = buf_new_with_capacity(4096);
- for (j=0;j<100;++j)
- write_to_buf(str, 255, buf);
- test_eq(buf_datalen(buf), 25500);
- for (j=0;j<100;++j) {
- r = 10;
- move_buf_to_buf(buf2, buf, &r);
- test_eq(r, 0);
- }
- test_eq(buf_datalen(buf), 24500);
- test_eq(buf_datalen(buf2), 1000);
- for (j=0;j<3;++j) {
- fetch_from_buf(str2, 255, buf2);
- test_memeq(str2, str, 255);
- }
- r = 8192; /*big move*/
- move_buf_to_buf(buf2, buf, &r);
- test_eq(r, 0);
- r = 30000; /* incomplete move */
- move_buf_to_buf(buf2, buf, &r);
- test_eq(r, 13692);
- for (j=0;j<97;++j) {
- fetch_from_buf(str2, 255, buf2);
- test_memeq(str2, str, 255);
- }
- buf_free(buf);
- buf_free(buf2);
- buf = buf2 = NULL;
-
- buf = buf_new_with_capacity(5);
- cp = "Testing. This is a moderately long Testing string.";
- for (j = 0; cp[j]; j++)
- write_to_buf(cp+j, 1, buf);
- test_eq(0, buf_find_string_offset(buf, "Testing", 7));
- test_eq(1, buf_find_string_offset(buf, "esting", 6));
- test_eq(1, buf_find_string_offset(buf, "est", 3));
- test_eq(39, buf_find_string_offset(buf, "ing str", 7));
- test_eq(35, buf_find_string_offset(buf, "Testing str", 11));
- test_eq(32, buf_find_string_offset(buf, "ng ", 3));
- test_eq(43, buf_find_string_offset(buf, "string.", 7));
- test_eq(-1, buf_find_string_offset(buf, "shrdlu", 6));
- test_eq(-1, buf_find_string_offset(buf, "Testing thing", 13));
- test_eq(-1, buf_find_string_offset(buf, "ngx", 3));
- buf_free(buf);
- buf = NULL;
-
- /* Try adding a string too long for any freelist. */
- {
- char *cp = tor_malloc_zero(65536);
- buf = buf_new();
- write_to_buf(cp, 65536, buf);
- tor_free(cp);
-
- tt_int_op(buf_datalen(buf), ==, 65536);
- buf_free(buf);
- buf = NULL;
- }
-
- done:
- if (buf)
- buf_free(buf);
- if (buf2)
- buf_free(buf2);
-}
-
/** Run unit tests for the onion handshake code. */
static void
test_onion_handshake(void)
@@ -1621,6 +1002,34 @@ test_rend_fns(void)
tor_free(intro_points_encrypted);
}
+ /* Record odd numbered fake-IPs using ipv6, even numbered fake-IPs
+ * using ipv4. Since our fake geoip database is the same between
+ * ipv4 and ipv6, we should get the same result no matter which
+ * address family we pick for each IP. */
+#define SET_TEST_ADDRESS(i) do { \
+ if ((i) & 1) { \
+ SET_TEST_IPV6(i); \
+ tor_addr_from_in6(&addr, &in6); \
+ } else { \
+ tor_addr_from_ipv4h(&addr, (uint32_t) i); \
+ } \
+ } while (0)
+
+ /* Make sure that country ID actually works. */
+#define SET_TEST_IPV6(i) \
+ do { \
+ set_uint32(in6.s6_addr + 12, htonl((uint32_t) (i))); \
+ } while (0)
+#define CHECK_COUNTRY(country, val) do { \
+ /* test ipv4 country lookup */ \
+ test_streq(country, \
+ geoip_get_country_name(geoip_get_country_by_ipv4(val))); \
+ /* test ipv6 country lookup */ \
+ SET_TEST_IPV6(val); \
+ test_streq(country, \
+ geoip_get_country_name(geoip_get_country_by_ipv6(&in6))); \
+ } while (0)
+
/** Run unit tests for GeoIP code. */
static void
test_geoip(void)
@@ -1631,7 +1040,8 @@ test_geoip(void)
const char *bridge_stats_1 =
"bridge-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"bridge-ips zz=24,xy=8\n"
- "bridge-ip-versions v4=16,v6=16\n",
+ "bridge-ip-versions v4=16,v6=16\n"
+ "bridge-ip-transports <OR>=24\n",
*dirreq_stats_1 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips ab=8\n"
@@ -1695,21 +1105,6 @@ test_geoip(void)
test_eq(4, geoip_get_n_countries());
memset(&in6, 0, sizeof(in6));
- /* Make sure that country ID actually works. */
-#define SET_TEST_IPV6(i) \
- do { \
- set_uint32(in6.s6_addr + 12, htonl((uint32_t) (i))); \
- } while (0)
-#define CHECK_COUNTRY(country, val) do { \
- /* test ipv4 country lookup */ \
- test_streq(country, \
- geoip_get_country_name(geoip_get_country_by_ipv4(val))); \
- /* test ipv6 country lookup */ \
- SET_TEST_IPV6(val); \
- test_streq(country, \
- geoip_get_country_name(geoip_get_country_by_ipv6(&in6))); \
- } while (0)
-
CHECK_COUNTRY("??", 3);
CHECK_COUNTRY("ab", 32);
CHECK_COUNTRY("??", 5);
@@ -1722,40 +1117,25 @@ test_geoip(void)
SET_TEST_IPV6(3);
test_eq(0, geoip_get_country_by_ipv6(&in6));
-#undef CHECK_COUNTRY
-
- /* Record odd numbered fake-IPs using ipv6, even numbered fake-IPs
- * using ipv4. Since our fake geoip database is the same between
- * ipv4 and ipv6, we should get the same result no matter which
- * address family we pick for each IP. */
-#define SET_TEST_ADDRESS(i) do { \
- if ((i) & 1) { \
- SET_TEST_IPV6(i); \
- tor_addr_from_in6(&addr, &in6); \
- } else { \
- tor_addr_from_ipv4h(&addr, (uint32_t) i); \
- } \
- } while (0)
-
get_options_mutable()->BridgeRelay = 1;
get_options_mutable()->BridgeRecordUsageByCountry = 1;
/* Put 9 observations in AB... */
for (i=32; i < 40; ++i) {
SET_TEST_ADDRESS(i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-7200);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
}
SET_TEST_ADDRESS(225);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-7200);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
/* and 3 observations in XY, several times. */
for (j=0; j < 10; ++j)
for (i=52; i < 55; ++i) {
SET_TEST_ADDRESS(i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-3600);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-3600);
}
/* and 17 observations in ZZ... */
for (i=110; i < 127; ++i) {
SET_TEST_ADDRESS(i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
}
geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s);
@@ -1804,7 +1184,7 @@ test_geoip(void)
/* Start testing dirreq statistics by making sure that we don't collect
* dirreq stats without initializing them. */
SET_TEST_ADDRESS(100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s);
@@ -1812,7 +1192,7 @@ test_geoip(void)
* dirreq-stats history string. */
geoip_dirreq_stats_init(now);
SET_TEST_ADDRESS(100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_1, s);
tor_free(s);
@@ -1821,7 +1201,7 @@ test_geoip(void)
* don't generate a history string. */
geoip_dirreq_stats_term();
SET_TEST_ADDRESS(101);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s);
@@ -1829,7 +1209,7 @@ test_geoip(void)
* that we get an all empty history string. */
geoip_dirreq_stats_init(now);
SET_TEST_ADDRESS(100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
geoip_reset_dirreq_stats(now);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_2, s);
@@ -1856,7 +1236,7 @@ test_geoip(void)
/* Start testing entry statistics by making sure that we don't collect
* anything without initializing entry stats. */
SET_TEST_ADDRESS(100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_assert(!s);
@@ -1864,7 +1244,7 @@ test_geoip(void)
* entry-stats history string. */
geoip_entry_stats_init(now);
SET_TEST_ADDRESS(100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_streq(entry_stats_1, s);
tor_free(s);
@@ -1873,7 +1253,7 @@ test_geoip(void)
* don't generate a history string. */
geoip_entry_stats_term();
SET_TEST_ADDRESS(101);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_assert(!s);
@@ -1881,15 +1261,12 @@ test_geoip(void)
* that we get an all empty history string. */
geoip_entry_stats_init(now);
SET_TEST_ADDRESS(100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
geoip_reset_entry_stats(now);
s = geoip_format_entry_stats(now + 86400);
test_streq(entry_stats_2, s);
tor_free(s);
-#undef SET_TEST_ADDRESS
-#undef SET_TEST_IPV6
-
/* Stop collecting entry statistics. */
geoip_entry_stats_term();
get_options_mutable()->EntryStatistics = 0;
@@ -1899,6 +1276,79 @@ test_geoip(void)
tor_free(v);
}
+static void
+test_geoip_with_pt(void)
+{
+ time_t now = 1281533250; /* 2010-08-11 13:27:30 UTC */
+ char *s = NULL;
+ int i;
+ tor_addr_t addr;
+ struct in6_addr in6;
+
+ get_options_mutable()->BridgeRelay = 1;
+ get_options_mutable()->BridgeRecordUsageByCountry = 1;
+
+ /* No clients seen yet. */
+ s = geoip_get_transport_history();
+ tor_assert(!s);
+
+ /* 4 connections without a pluggable transport */
+ for (i=0; i < 4; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
+ }
+
+ /* 9 connections with "alpha" */
+ for (i=4; i < 13; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "alpha", now-7200);
+ }
+
+ /* one connection with "beta" */
+ SET_TEST_ADDRESS(13);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "beta", now-7200);
+
+ /* 14 connections with "charlie" */
+ for (i=14; i < 28; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "charlie", now-7200);
+ }
+
+ /* 131 connections with "ddr" */
+ for (i=28; i < 159; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "ddr", now-7200);
+ }
+
+ /* 8 connections with "entropy" */
+ for (i=159; i < 167; ++i) {
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "entropy", now-7200);
+ }
+
+ /* 2 connections from the same IP with two different transports. */
+ SET_TEST_ADDRESS(++i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "fire", now-7200);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, "google", now-7200);
+
+ /* Test the transport history string. */
+ s = geoip_get_transport_history();
+ tor_assert(s);
+ test_streq(s, "<OR>=8,alpha=16,beta=8,charlie=16,ddr=136,"
+ "entropy=8,fire=8,google=8");
+
+ /* Stop collecting entry statistics. */
+ geoip_entry_stats_term();
+ get_options_mutable()->EntryStatistics = 0;
+
+ done:
+ tor_free(s);
+}
+
+#undef SET_TEST_ADDRESS
+#undef SET_TEST_IPV6
+#undef CHECK_COUNTRY
+
/** Run unit tests for stats code. */
static void
test_stats(void)
@@ -2089,8 +1539,6 @@ const struct testcase_setup_t legacy_setup = {
{ #name, legacy_test_helper, TT_FORK, &legacy_setup, test_ ## name }
static struct testcase_t test_array[] = {
- ENT(buffers),
- { "buffer_copy", test_buffer_copy, 0, NULL, NULL },
ENT(onion_handshake),
{ "bad_onion_handshake", test_bad_onion_handshake, 0, NULL, NULL },
#ifdef CURVE25519_ENABLED
@@ -2100,29 +1548,14 @@ static struct testcase_t test_array[] = {
ENT(policies),
ENT(rend_fns),
ENT(geoip),
+ FORK(geoip_with_pt),
FORK(stats),
END_OF_TESTCASES
};
-#define SOCKSENT(name) \
- { #name, test_socks_##name, TT_FORK, &socks_setup, NULL }
-
-static struct testcase_t socks_tests[] = {
- SOCKSENT(4_unsupported_commands),
- SOCKSENT(4_supported_commands),
-
- SOCKSENT(5_unsupported_commands),
- SOCKSENT(5_supported_commands),
- SOCKSENT(5_no_authenticate),
- SOCKSENT(5_auth_before_negotiation),
- SOCKSENT(5_authenticate),
- SOCKSENT(5_authenticate_with_data),
-
- END_OF_TESTCASES
-};
-
extern struct testcase_t addr_tests[];
+extern struct testcase_t buffer_tests[];
extern struct testcase_t crypto_tests[];
extern struct testcase_t container_tests[];
extern struct testcase_t util_tests[];
@@ -2133,21 +1566,33 @@ extern struct testcase_t config_tests[];
extern struct testcase_t introduce_tests[];
extern struct testcase_t replaycache_tests[];
extern struct testcase_t cell_format_tests[];
+extern struct testcase_t circuitlist_tests[];
+extern struct testcase_t circuitmux_tests[];
+extern struct testcase_t cell_queue_tests[];
+extern struct testcase_t options_tests[];
+extern struct testcase_t socks_tests[];
+extern struct testcase_t extorport_tests[];
static struct testgroup_t testgroups[] = {
{ "", test_array },
+ { "buffer/", buffer_tests },
{ "socks/", socks_tests },
{ "addr/", addr_tests },
{ "crypto/", crypto_tests },
{ "container/", container_tests },
{ "util/", util_tests },
{ "cellfmt/", cell_format_tests },
+ { "cellqueue/", cell_queue_tests },
{ "dir/", dir_tests },
{ "dir/md/", microdesc_tests },
{ "pt/", pt_tests },
{ "config/", config_tests },
{ "replaycache/", replaycache_tests },
{ "introduce/", introduce_tests },
+ { "circuitlist/", circuitlist_tests },
+ { "circuitmux/", circuitmux_tests },
+ { "options/", options_tests },
+ { "extorport/", extorport_tests },
END_OF_GROUPS
};
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
new file mode 100644
index 000000000..a009faa0b
--- /dev/null
+++ b/src/test/test_buffers.c
@@ -0,0 +1,342 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define BUFFERS_PRIVATE
+#include "or.h"
+#include "buffers.h"
+#include "ext_orport.h"
+#include "test.h"
+
+/** Run unit tests for buffers.c */
+static void
+test_buffers_basic(void *arg)
+{
+ char str[256];
+ char str2[256];
+
+ buf_t *buf = NULL, *buf2 = NULL;
+ const char *cp;
+
+ int j;
+ size_t r;
+ (void) arg;
+
+ /****
+ * buf_new
+ ****/
+ if (!(buf = buf_new()))
+ test_fail();
+
+ //test_eq(buf_capacity(buf), 4096);
+ test_eq(buf_datalen(buf), 0);
+
+ /****
+ * General pointer frobbing
+ */
+ for (j=0;j<256;++j) {
+ str[j] = (char)j;
+ }
+ write_to_buf(str, 256, buf);
+ write_to_buf(str, 256, buf);
+ test_eq(buf_datalen(buf), 512);
+ fetch_from_buf(str2, 200, buf);
+ test_memeq(str, str2, 200);
+ test_eq(buf_datalen(buf), 312);
+ memset(str2, 0, sizeof(str2));
+
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str+200, str2, 56);
+ test_memeq(str, str2+56, 200);
+ test_eq(buf_datalen(buf), 56);
+ memset(str2, 0, sizeof(str2));
+ /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add
+ * another 3584 bytes, we hit the end. */
+ for (j=0;j<15;++j) {
+ write_to_buf(str, 256, buf);
+ }
+ assert_buf_ok(buf);
+ test_eq(buf_datalen(buf), 3896);
+ fetch_from_buf(str2, 56, buf);
+ test_eq(buf_datalen(buf), 3840);
+ test_memeq(str+200, str2, 56);
+ for (j=0;j<15;++j) {
+ memset(str2, 0, sizeof(str2));
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str, str2, 256);
+ }
+ test_eq(buf_datalen(buf), 0);
+ buf_free(buf);
+ buf = NULL;
+
+ /* Okay, now make sure growing can work. */
+ buf = buf_new_with_capacity(16);
+ //test_eq(buf_capacity(buf), 16);
+ write_to_buf(str+1, 255, buf);
+ //test_eq(buf_capacity(buf), 256);
+ fetch_from_buf(str2, 254, buf);
+ test_memeq(str+1, str2, 254);
+ //test_eq(buf_capacity(buf), 256);
+ assert_buf_ok(buf);
+ write_to_buf(str, 32, buf);
+ //test_eq(buf_capacity(buf), 256);
+ assert_buf_ok(buf);
+ write_to_buf(str, 256, buf);
+ assert_buf_ok(buf);
+ //test_eq(buf_capacity(buf), 512);
+ test_eq(buf_datalen(buf), 33+256);
+ fetch_from_buf(str2, 33, buf);
+ test_eq(*str2, str[255]);
+
+ test_memeq(str2+1, str, 32);
+ //test_eq(buf_capacity(buf), 512);
+ test_eq(buf_datalen(buf), 256);
+ fetch_from_buf(str2, 256, buf);
+ test_memeq(str, str2, 256);
+
+ /* now try shrinking: case 1. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(33668);
+ for (j=0;j<67;++j) {
+ write_to_buf(str,255, buf);
+ }
+ //test_eq(buf_capacity(buf), 33668);
+ test_eq(buf_datalen(buf), 17085);
+ for (j=0; j < 40; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+
+ /* now try shrinking: case 2. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(33668);
+ for (j=0;j<67;++j) {
+ write_to_buf(str,255, buf);
+ }
+ for (j=0; j < 20; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+ for (j=0;j<80;++j) {
+ write_to_buf(str,255, buf);
+ }
+ //test_eq(buf_capacity(buf),33668);
+ for (j=0; j < 120; ++j) {
+ fetch_from_buf(str2, 255,buf);
+ test_memeq(str2, str, 255);
+ }
+
+ /* Move from buf to buf. */
+ buf_free(buf);
+ buf = buf_new_with_capacity(4096);
+ buf2 = buf_new_with_capacity(4096);
+ for (j=0;j<100;++j)
+ write_to_buf(str, 255, buf);
+ test_eq(buf_datalen(buf), 25500);
+ for (j=0;j<100;++j) {
+ r = 10;
+ move_buf_to_buf(buf2, buf, &r);
+ test_eq(r, 0);
+ }
+ test_eq(buf_datalen(buf), 24500);
+ test_eq(buf_datalen(buf2), 1000);
+ for (j=0;j<3;++j) {
+ fetch_from_buf(str2, 255, buf2);
+ test_memeq(str2, str, 255);
+ }
+ r = 8192; /*big move*/
+ move_buf_to_buf(buf2, buf, &r);
+ test_eq(r, 0);
+ r = 30000; /* incomplete move */
+ move_buf_to_buf(buf2, buf, &r);
+ test_eq(r, 13692);
+ for (j=0;j<97;++j) {
+ fetch_from_buf(str2, 255, buf2);
+ test_memeq(str2, str, 255);
+ }
+ buf_free(buf);
+ buf_free(buf2);
+ buf = buf2 = NULL;
+
+ buf = buf_new_with_capacity(5);
+ cp = "Testing. This is a moderately long Testing string.";
+ for (j = 0; cp[j]; j++)
+ write_to_buf(cp+j, 1, buf);
+ test_eq(0, buf_find_string_offset(buf, "Testing", 7));
+ test_eq(1, buf_find_string_offset(buf, "esting", 6));
+ test_eq(1, buf_find_string_offset(buf, "est", 3));
+ test_eq(39, buf_find_string_offset(buf, "ing str", 7));
+ test_eq(35, buf_find_string_offset(buf, "Testing str", 11));
+ test_eq(32, buf_find_string_offset(buf, "ng ", 3));
+ test_eq(43, buf_find_string_offset(buf, "string.", 7));
+ test_eq(-1, buf_find_string_offset(buf, "shrdlu", 6));
+ test_eq(-1, buf_find_string_offset(buf, "Testing thing", 13));
+ test_eq(-1, buf_find_string_offset(buf, "ngx", 3));
+ buf_free(buf);
+ buf = NULL;
+
+ /* Try adding a string too long for any freelist. */
+ {
+ char *cp = tor_malloc_zero(65536);
+ buf = buf_new();
+ write_to_buf(cp, 65536, buf);
+ tor_free(cp);
+
+ tt_int_op(buf_datalen(buf), ==, 65536);
+ buf_free(buf);
+ buf = NULL;
+ }
+
+ done:
+ if (buf)
+ buf_free(buf);
+ if (buf2)
+ buf_free(buf2);
+}
+static void
+test_buffer_copy(void *arg)
+{
+ generic_buffer_t *buf=NULL, *buf2=NULL;
+ const char *s;
+ size_t len;
+ char b[256];
+ int i;
+ (void)arg;
+
+ buf = generic_buffer_new();
+ tt_assert(buf);
+
+ /* Copy an empty buffer. */
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_assert(buf2);
+ tt_int_op(0, ==, generic_buffer_len(buf2));
+
+ /* Now try with a short buffer. */
+ s = "And now comes an act of enormous enormance!";
+ len = strlen(s);
+ generic_buffer_add(buf, s, len);
+ tt_int_op(len, ==, generic_buffer_len(buf));
+ /* Add junk to buf2 so we can test replacing.*/
+ generic_buffer_add(buf2, "BLARG", 5);
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, ==, generic_buffer_len(buf2));
+ generic_buffer_get(buf2, b, len);
+ test_mem_op(b, ==, s, len);
+ /* Now free buf2 and retry so we can test allocating */
+ generic_buffer_free(buf2);
+ buf2 = NULL;
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(len, ==, generic_buffer_len(buf2));
+ generic_buffer_get(buf2, b, len);
+ test_mem_op(b, ==, s, len);
+ /* Clear buf for next test */
+ generic_buffer_get(buf, b, len);
+ tt_int_op(generic_buffer_len(buf),==,0);
+
+ /* Okay, now let's try a bigger buffer. */
+ s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit "
+ "esse quam nihil molestiae consequatur, vel illum qui dolorem eum "
+ "fugiat quo voluptas nulla pariatur?";
+ len = strlen(s);
+ for (i = 0; i < 256; ++i) {
+ b[0]=i;
+ generic_buffer_add(buf, b, 1);
+ generic_buffer_add(buf, s, len);
+ }
+ tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
+ tt_int_op(generic_buffer_len(buf2), ==, generic_buffer_len(buf));
+ for (i = 0; i < 256; ++i) {
+ generic_buffer_get(buf2, b, len+1);
+ tt_int_op((unsigned char)b[0],==,i);
+ test_mem_op(b+1, ==, s, len);
+ }
+
+ done:
+ if (buf)
+ generic_buffer_free(buf);
+ if (buf2)
+ generic_buffer_free(buf2);
+}
+
+static void
+test_buffer_ext_or_cmd(void *arg)
+{
+ ext_or_cmd_t *cmd = NULL;
+ generic_buffer_t *buf = generic_buffer_new();
+ char *tmp = NULL;
+ (void) arg;
+
+ /* Empty -- should give "not there. */
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, ==, cmd);
+
+ /* Three bytes: shouldn't work. */
+ generic_buffer_add(buf, "\x00\x20\x00", 3);
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, ==, cmd);
+ tt_int_op(3, ==, generic_buffer_len(buf));
+
+ /* 0020 0000: That's a nil command. It should work. */
+ generic_buffer_add(buf, "\x00", 1);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0x20, ==, cmd->cmd);
+ tt_int_op(0, ==, cmd->len);
+ tt_int_op(0, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ /* Now try a length-6 command with one byte missing. */
+ generic_buffer_add(buf, "\x10\x21\x00\x06""abcde", 9);
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, ==, cmd);
+ generic_buffer_add(buf, "f", 1);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0x1021, ==, cmd->cmd);
+ tt_int_op(6, ==, cmd->len);
+ test_mem_op("abcdef", ==, cmd->body, 6);
+ tt_int_op(0, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ /* Now try a length-10 command with 4 extra bytes. */
+ generic_buffer_add(buf, "\xff\xff\x00\x0a"
+ "loremipsum\x10\x00\xff\xff", 18);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0xffff, ==, cmd->cmd);
+ tt_int_op(10, ==, cmd->len);
+ test_mem_op("loremipsum", ==, cmd->body, 10);
+ tt_int_op(4, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ /* Finally, let's try a maximum-length command. We already have the header
+ * waiting. */
+ tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tmp = tor_malloc_zero(65535);
+ generic_buffer_add(buf, tmp, 65535);
+ tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd));
+ tt_ptr_op(NULL, !=, cmd);
+ tt_int_op(0x1000, ==, cmd->cmd);
+ tt_int_op(0xffff, ==, cmd->len);
+ test_mem_op(tmp, ==, cmd->body, 65535);
+ tt_int_op(0, ==, generic_buffer_len(buf));
+ ext_or_cmd_free(cmd);
+ cmd = NULL;
+
+ done:
+ ext_or_cmd_free(cmd);
+ generic_buffer_free(buf);
+ tor_free(tmp);
+}
+
+struct testcase_t buffer_tests[] = {
+ { "basic", test_buffers_basic, 0, NULL, NULL },
+ { "copy", test_buffer_copy, 0, NULL, NULL },
+ { "ext_or_cmd", test_buffer_ext_or_cmd, 0, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_cell_queue.c b/src/test/test_cell_queue.c
new file mode 100644
index 000000000..cf2d11ad5
--- /dev/null
+++ b/src/test/test_cell_queue.c
@@ -0,0 +1,146 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CIRCUITLIST_PRIVATE
+#define RELAY_PRIVATE
+#include "or.h"
+#include "circuitlist.h"
+#include "relay.h"
+#include "test.h"
+
+static void
+test_cq_manip(void *arg)
+{
+ packed_cell_t *pc1=NULL, *pc2=NULL, *pc3=NULL, *pc4=NULL, *pc_tmp=NULL;
+ cell_queue_t cq;
+ cell_t cell;
+ (void) arg;
+
+ init_cell_pool();
+ cell_queue_init(&cq);
+ tt_int_op(cq.n, ==, 0);
+
+ pc1 = packed_cell_new();
+ pc2 = packed_cell_new();
+ pc3 = packed_cell_new();
+ pc4 = packed_cell_new();
+ tt_assert(pc1 && pc2 && pc3 && pc4);
+
+ tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+
+ /* Add and remove a singleton. */
+ cell_queue_append(&cq, pc1);
+ tt_int_op(cq.n, ==, 1);
+ tt_ptr_op(pc1, ==, cell_queue_pop(&cq));
+ tt_int_op(cq.n, ==, 0);
+
+ /* Add and remove four items */
+ cell_queue_append(&cq, pc4);
+ cell_queue_append(&cq, pc3);
+ cell_queue_append(&cq, pc2);
+ cell_queue_append(&cq, pc1);
+ tt_int_op(cq.n, ==, 4);
+ tt_ptr_op(pc4, ==, cell_queue_pop(&cq));
+ tt_ptr_op(pc3, ==, cell_queue_pop(&cq));
+ tt_ptr_op(pc2, ==, cell_queue_pop(&cq));
+ tt_ptr_op(pc1, ==, cell_queue_pop(&cq));
+ tt_int_op(cq.n, ==, 0);
+ tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+
+ /* Try a packed copy (wide, then narrow, which is a bit of a cheat, since a
+ * real cell queue has only one type.) */
+ memset(&cell, 0, sizeof(cell));
+ cell.circ_id = 0x12345678;
+ cell.command = 10;
+ strlcpy((char*)cell.payload, "Lorax ipsum gruvvulus thneed amet, snergelly "
+ "once-ler lerkim, sed do barbaloot tempor gluppitus ut labore et "
+ "truffula magna aliqua.",
+ sizeof(cell.payload));
+ cell_queue_append_packed_copy(&cq, &cell, 1 /*wide*/, 0 /*stats*/);
+ cell.circ_id = 0x2013;
+ cell_queue_append_packed_copy(&cq, &cell, 0 /*wide*/, 0 /*stats*/);
+ tt_int_op(cq.n, ==, 2);
+
+ pc_tmp = cell_queue_pop(&cq);
+ tt_int_op(cq.n, ==, 1);
+ tt_ptr_op(pc_tmp, !=, NULL);
+ test_mem_op(pc_tmp->body, ==, "\x12\x34\x56\x78\x0a", 5);
+ test_mem_op(pc_tmp->body+5, ==, cell.payload, sizeof(cell.payload));
+ packed_cell_free(pc_tmp);
+
+ pc_tmp = cell_queue_pop(&cq);
+ tt_int_op(cq.n, ==, 0);
+ tt_ptr_op(pc_tmp, !=, NULL);
+ test_mem_op(pc_tmp->body, ==, "\x20\x13\x0a", 3);
+ test_mem_op(pc_tmp->body+3, ==, cell.payload, sizeof(cell.payload));
+ packed_cell_free(pc_tmp);
+ pc_tmp = NULL;
+
+ tt_ptr_op(NULL, ==, cell_queue_pop(&cq));
+
+ /* Now make sure cell_queue_clear works. */
+ cell_queue_append(&cq, pc2);
+ cell_queue_append(&cq, pc1);
+ tt_int_op(cq.n, ==, 2);
+ cell_queue_clear(&cq);
+ pc2 = pc1 = NULL; /* prevent double-free */
+ tt_int_op(cq.n, ==, 0);
+
+ done:
+ packed_cell_free(pc1);
+ packed_cell_free(pc2);
+ packed_cell_free(pc3);
+ packed_cell_free(pc4);
+ packed_cell_free(pc_tmp);
+
+ cell_queue_clear(&cq);
+ free_cell_pool();
+}
+
+static void
+test_circuit_n_cells(void *arg)
+{
+ packed_cell_t *pc1=NULL, *pc2=NULL, *pc3=NULL, *pc4=NULL, *pc5=NULL;
+ origin_circuit_t *origin_c=NULL;
+ or_circuit_t *or_c=NULL;
+
+ (void)arg;
+
+ init_cell_pool();
+
+ pc1 = packed_cell_new();
+ pc2 = packed_cell_new();
+ pc3 = packed_cell_new();
+ pc4 = packed_cell_new();
+ pc5 = packed_cell_new();
+ tt_assert(pc1 && pc2 && pc3 && pc4 && pc5);
+
+ or_c = or_circuit_new(0, NULL);
+ origin_c = origin_circuit_new();
+ origin_c->base_.purpose = CIRCUIT_PURPOSE_C_GENERAL;
+
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 0);
+ cell_queue_append(&or_c->p_chan_cells, pc1);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 1);
+ cell_queue_append(&or_c->base_.n_chan_cells, pc2);
+ cell_queue_append(&or_c->base_.n_chan_cells, pc3);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 3);
+
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 0);
+ cell_queue_append(&origin_c->base_.n_chan_cells, pc4);
+ cell_queue_append(&origin_c->base_.n_chan_cells, pc5);
+ tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 2);
+
+ done:
+ circuit_free(TO_CIRCUIT(or_c));
+ circuit_free(TO_CIRCUIT(origin_c));
+
+ free_cell_pool();
+}
+
+struct testcase_t cell_queue_tests[] = {
+ { "basic", test_cq_manip, TT_FORK, NULL, NULL, },
+ { "circ_n_cells", test_circuit_n_cells, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_circuitlist.c b/src/test/test_circuitlist.c
new file mode 100644
index 000000000..720b40765
--- /dev/null
+++ b/src/test/test_circuitlist.c
@@ -0,0 +1,168 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define TOR_CHANNEL_INTERNAL_
+#define CIRCUITLIST_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "circuitlist.h"
+#include "test.h"
+
+static channel_t *
+new_fake_channel(void)
+{
+ channel_t *chan = tor_malloc_zero(sizeof(channel_t));
+ channel_init(chan);
+ return chan;
+}
+
+static struct {
+ int ncalls;
+ void *cmux;
+ void *circ;
+ cell_direction_t dir;
+} cam;
+
+static void
+circuitmux_attach_mock(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t dir)
+{
+ ++cam.ncalls;
+ cam.cmux = cmux;
+ cam.circ = circ;
+ cam.dir = dir;
+}
+
+static struct {
+ int ncalls;
+ void *cmux;
+ void *circ;
+} cdm;
+
+static void
+circuitmux_detach_mock(circuitmux_t *cmux, circuit_t *circ)
+{
+ ++cdm.ncalls;
+ cdm.cmux = cmux;
+ cdm.circ = circ;
+}
+
+#define GOT_CMUX_ATTACH(mux_, circ_, dir_) do { \
+ tt_int_op(cam.ncalls, ==, 1); \
+ tt_ptr_op(cam.cmux, ==, (mux_)); \
+ tt_ptr_op(cam.circ, ==, (circ_)); \
+ tt_ptr_op(cam.dir, ==, (dir_)); \
+ memset(&cam, 0, sizeof(cam)); \
+ } while (0)
+
+#define GOT_CMUX_DETACH(mux_, circ_) do { \
+ tt_int_op(cdm.ncalls, ==, 1); \
+ tt_ptr_op(cdm.cmux, ==, (mux_)); \
+ tt_ptr_op(cdm.circ, ==, (circ_)); \
+ memset(&cdm, 0, sizeof(cdm)); \
+ } while (0)
+
+static void
+test_clist_maps(void *arg)
+{
+ channel_t *ch1 = new_fake_channel();
+ channel_t *ch2 = new_fake_channel();
+ channel_t *ch3 = new_fake_channel();
+ or_circuit_t *or_c1=NULL, *or_c2=NULL;
+
+ (void) arg;
+
+ MOCK(circuitmux_attach_circuit, circuitmux_attach_mock);
+ MOCK(circuitmux_detach_circuit, circuitmux_detach_mock);
+ memset(&cam, 0, sizeof(cam));
+ memset(&cdm, 0, sizeof(cdm));
+
+ ch1->cmux = (void*)0x1001;
+ ch2->cmux = (void*)0x1002;
+ ch3->cmux = (void*)0x1003;
+
+ or_c1 = or_circuit_new(100, ch2);
+ tt_assert(or_c1);
+ GOT_CMUX_ATTACH(ch2->cmux, or_c1, CELL_DIRECTION_IN);
+ tt_int_op(or_c1->p_circ_id, ==, 100);
+ tt_ptr_op(or_c1->p_chan, ==, ch2);
+
+ or_c2 = or_circuit_new(100, ch1);
+ tt_assert(or_c2);
+ GOT_CMUX_ATTACH(ch1->cmux, or_c2, CELL_DIRECTION_IN);
+ tt_int_op(or_c2->p_circ_id, ==, 100);
+ tt_ptr_op(or_c2->p_chan, ==, ch1);
+
+ circuit_set_n_circid_chan(TO_CIRCUIT(or_c1), 200, ch1);
+ GOT_CMUX_ATTACH(ch1->cmux, or_c1, CELL_DIRECTION_OUT);
+
+ circuit_set_n_circid_chan(TO_CIRCUIT(or_c2), 200, ch2);
+ GOT_CMUX_ATTACH(ch2->cmux, or_c2, CELL_DIRECTION_OUT);
+
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch1), ==, TO_CIRCUIT(or_c1));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, TO_CIRCUIT(or_c2));
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, TO_CIRCUIT(or_c1));
+ /* Try the same thing again, to test the "fast" path. */
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, TO_CIRCUIT(or_c1));
+ tt_assert(circuit_id_in_use_on_channel(100, ch2));
+ tt_assert(! circuit_id_in_use_on_channel(101, ch2));
+
+ /* Try changing the circuitid and channel of that circuit. */
+ circuit_set_p_circid_chan(or_c1, 500, ch3);
+ GOT_CMUX_DETACH(ch2->cmux, TO_CIRCUIT(or_c1));
+ GOT_CMUX_ATTACH(ch3->cmux, TO_CIRCUIT(or_c1), CELL_DIRECTION_IN);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, NULL);
+ tt_assert(! circuit_id_in_use_on_channel(100, ch2));
+ tt_ptr_op(circuit_get_by_circid_channel(500, ch3), ==, TO_CIRCUIT(or_c1));
+
+ /* Now let's see about destroy handling. */
+ tt_assert(! circuit_id_in_use_on_channel(205, ch2));
+ tt_assert(circuit_id_in_use_on_channel(200, ch2));
+ channel_note_destroy_pending(ch2, 200);
+ channel_note_destroy_pending(ch2, 205);
+ channel_note_destroy_pending(ch1, 100);
+ tt_assert(circuit_id_in_use_on_channel(205, ch2))
+ tt_assert(circuit_id_in_use_on_channel(200, ch2));
+ tt_assert(circuit_id_in_use_on_channel(100, ch1));
+
+ tt_assert(TO_CIRCUIT(or_c2)->n_delete_pending != 0);
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, TO_CIRCUIT(or_c2));
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, TO_CIRCUIT(or_c2));
+
+ /* Okay, now free ch2 and make sure that the circuit ID is STILL not
+ * usable, because we haven't declared the destroy to be nonpending */
+ tt_int_op(cdm.ncalls, ==, 0);
+ circuit_free(TO_CIRCUIT(or_c2));
+ or_c2 = NULL; /* prevent free */
+ tt_int_op(cdm.ncalls, ==, 2);
+ memset(&cdm, 0, sizeof(cdm));
+ tt_assert(circuit_id_in_use_on_channel(200, ch2));
+ tt_assert(circuit_id_in_use_on_channel(100, ch1));
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, NULL);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL);
+
+ /* Now say that the destroy is nonpending */
+ channel_note_destroy_not_pending(ch2, 200);
+ tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, NULL);
+ channel_note_destroy_not_pending(ch1, 100);
+ tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL);
+ tt_assert(! circuit_id_in_use_on_channel(200, ch2));
+ tt_assert(! circuit_id_in_use_on_channel(100, ch1));
+
+ done:
+ tor_free(ch1);
+ tor_free(ch2);
+ tor_free(ch3);
+ if (or_c1)
+ circuit_free(TO_CIRCUIT(or_c1));
+ if (or_c2)
+ circuit_free(TO_CIRCUIT(or_c2));
+ UNMOCK(circuitmux_attach_circuit);
+ UNMOCK(circuitmux_detach_circuit);
+}
+
+struct testcase_t circuitlist_tests[] = {
+ { "maps", test_clist_maps, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c
new file mode 100644
index 000000000..0f592001c
--- /dev/null
+++ b/src/test/test_circuitmux.c
@@ -0,0 +1,84 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define TOR_CHANNEL_INTERNAL_
+#define CIRCUITMUX_PRIVATE
+#define RELAY_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "circuitmux.h"
+#include "relay.h"
+#include "test.h"
+
+/* XXXX duplicated function from test_circuitlist.c */
+static channel_t *
+new_fake_channel(void)
+{
+ channel_t *chan = tor_malloc_zero(sizeof(channel_t));
+ channel_init(chan);
+ return chan;
+}
+
+static int
+has_queued_writes(channel_t *c)
+{
+ (void) c;
+ return 1;
+}
+
+/** Test destroy cell queue with no interference from other queues. */
+static void
+test_cmux_destroy_cell_queue(void *arg)
+{
+ circuitmux_t *cmux = NULL;
+ channel_t *ch = NULL;
+ circuit_t *circ = NULL;
+ cell_queue_t *cq = NULL;
+ packed_cell_t *pc = NULL;
+
+ init_cell_pool();
+ (void) arg;
+
+ cmux = circuitmux_alloc();
+ tt_assert(cmux);
+ ch = new_fake_channel();
+ ch->has_queued_writes = has_queued_writes;
+ ch->wide_circ_ids = 1;
+
+ circ = circuitmux_get_first_active_circuit(cmux, &cq);
+ tt_assert(!circ);
+ tt_assert(!cq);
+
+ circuitmux_append_destroy_cell(ch, cmux, 100, 10);
+ circuitmux_append_destroy_cell(ch, cmux, 190, 6);
+ circuitmux_append_destroy_cell(ch, cmux, 30, 1);
+
+ tt_int_op(circuitmux_num_cells(cmux), ==, 3);
+
+ circ = circuitmux_get_first_active_circuit(cmux, &cq);
+ tt_assert(!circ);
+ tt_assert(cq);
+
+ tt_int_op(cq->n, ==, 3);
+
+ pc = cell_queue_pop(cq);
+ tt_assert(pc);
+ test_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9);
+ packed_cell_free(pc);
+ pc = NULL;
+
+ tt_int_op(circuitmux_num_cells(cmux), ==, 2);
+
+ done:
+ circuitmux_free(cmux);
+ channel_free(ch);
+ packed_cell_free(pc);
+
+ free_cell_pool();
+}
+
+struct testcase_t circuitmux_tests[] = {
+ { "destroy_cell_queue", test_cmux_destroy_cell_queue, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_config.c b/src/test/test_config.c
index 4e9e13e47..3848d352d 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -438,12 +438,84 @@ test_config_parse_bridge_line(void *arg)
"aa=b");
}
+static void
+test_config_parse_transport_options_line(void *arg)
+{
+ smartlist_t *options_sl = NULL, *sl_tmp = NULL;
+
+ (void) arg;
+
+ { /* too small line */
+ options_sl = get_options_from_transport_options_line("valley", NULL);
+ test_assert(!options_sl);
+ }
+
+ { /* no k=v values */
+ options_sl = get_options_from_transport_options_line("hit it!", NULL);
+ test_assert(!options_sl);
+ }
+
+ { /* correct line, but wrong transport specified */
+ options_sl =
+ get_options_from_transport_options_line("trebuchet k=v", "rook");
+ test_assert(!options_sl);
+ }
+
+ { /* correct -- no transport specified */
+ sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "ladi=dadi");
+ smartlist_add_asprintf(sl_tmp, "weliketo=party");
+
+ options_sl =
+ get_options_from_transport_options_line("rook ladi=dadi weliketo=party",
+ NULL);
+ test_assert(options_sl);
+ test_assert(smartlist_strings_eq(options_sl, sl_tmp));
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ sl_tmp = NULL;
+ SMARTLIST_FOREACH(options_sl, char *, s, tor_free(s));
+ smartlist_free(options_sl);
+ options_sl = NULL;
+ }
+
+ { /* correct -- correct transport specified */
+ sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "ladi=dadi");
+ smartlist_add_asprintf(sl_tmp, "weliketo=party");
+
+ options_sl =
+ get_options_from_transport_options_line("rook ladi=dadi weliketo=party",
+ "rook");
+ test_assert(options_sl);
+ test_assert(smartlist_strings_eq(options_sl, sl_tmp));
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ sl_tmp = NULL;
+ SMARTLIST_FOREACH(options_sl, char *, s, tor_free(s));
+ smartlist_free(options_sl);
+ options_sl = NULL;
+ }
+
+ done:
+ if (options_sl) {
+ SMARTLIST_FOREACH(options_sl, char *, s, tor_free(s));
+ smartlist_free(options_sl);
+ }
+ if (sl_tmp) {
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+}
+
#define CONFIG_TEST(name, flags) \
{ #name, test_config_ ## name, flags, NULL, NULL }
struct testcase_t config_tests[] = {
CONFIG_TEST(addressmap, 0),
CONFIG_TEST(parse_bridge_line, 0),
+ CONFIG_TEST(parse_transport_options_line, 0),
CONFIG_TEST(check_or_create_data_subdir, TT_FORK),
CONFIG_TEST(write_to_data_subdir, TT_FORK),
END_OF_TESTCASES
diff --git a/src/test/test_containers.c b/src/test/test_containers.c
index 005e102e2..6858fa485 100644
--- a/src/test/test_containers.c
+++ b/src/test/test_containers.c
@@ -469,6 +469,51 @@ test_container_smartlist_join(void)
tor_free(joined);
}
+static void
+test_container_smartlist_ints_eq(void *arg)
+{
+ smartlist_t *sl1 = NULL, *sl2 = NULL;
+ int x;
+ (void)arg;
+
+ tt_assert(smartlist_ints_eq(NULL, NULL));
+
+ sl1 = smartlist_new();
+ tt_assert(!smartlist_ints_eq(sl1, NULL));
+ tt_assert(!smartlist_ints_eq(NULL, sl1));
+
+ sl2 = smartlist_new();
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ x = 5;
+ smartlist_add(sl1, tor_memdup(&x, sizeof(int)));
+ smartlist_add(sl2, tor_memdup(&x, sizeof(int)));
+ x = 90;
+ smartlist_add(sl1, tor_memdup(&x, sizeof(int)));
+ smartlist_add(sl2, tor_memdup(&x, sizeof(int)));
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ x = -50;
+ smartlist_add(sl1, tor_memdup(&x, sizeof(int)));
+ tt_assert(! smartlist_ints_eq(sl1, sl2));
+ tt_assert(! smartlist_ints_eq(sl2, sl1));
+ smartlist_add(sl2, tor_memdup(&x, sizeof(int)));
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ *(int*)smartlist_get(sl1, 1) = 101010;
+ tt_assert(! smartlist_ints_eq(sl2, sl1));
+ *(int*)smartlist_get(sl2, 1) = 101010;
+ tt_assert(smartlist_ints_eq(sl1, sl2));
+
+ done:
+ if (sl1)
+ SMARTLIST_FOREACH(sl1, int *, ip, tor_free(ip));
+ if (sl2)
+ SMARTLIST_FOREACH(sl2, int *, ip, tor_free(ip));
+ smartlist_free(sl1);
+ smartlist_free(sl2);
+}
+
/** Run unit tests for bitarray code */
static void
test_container_bitarray(void)
@@ -784,7 +829,7 @@ test_container_order_functions(void)
}
static void
-test_di_map(void *arg)
+test_container_di_map(void *arg)
{
di_digest256_map_t *map = NULL;
const uint8_t key1[] = "In view of the fact that it was ";
@@ -912,18 +957,22 @@ test_container_fp_pair_map(void)
#define CONTAINER_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_container_ ## name }
+#define CONTAINER(name, flags) \
+ { #name, test_container_ ## name, (flags), NULL, NULL }
+
struct testcase_t container_tests[] = {
CONTAINER_LEGACY(smartlist_basic),
CONTAINER_LEGACY(smartlist_strings),
CONTAINER_LEGACY(smartlist_overlap),
CONTAINER_LEGACY(smartlist_digests),
CONTAINER_LEGACY(smartlist_join),
+ CONTAINER(smartlist_ints_eq, 0),
CONTAINER_LEGACY(bitarray),
CONTAINER_LEGACY(digestset),
CONTAINER_LEGACY(strmap),
CONTAINER_LEGACY(pqueue),
CONTAINER_LEGACY(order_functions),
- { "di_map", test_di_map, 0, NULL, NULL },
+ CONTAINER(di_map, 0),
CONTAINER_LEGACY(fp_pair_map),
END_OF_TESTCASES
};
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index f391cce6e..9dc43b1d2 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -4,7 +4,6 @@
/* See LICENSE for licensing information */
#include "orconfig.h"
-#define CRYPTO_PRIVATE
#define CRYPTO_CURVE25519_PRIVATE
#include "or.h"
#include "test.h"
@@ -632,7 +631,7 @@ test_crypto_formats(void)
data1 = tor_strdup("ABCD1234ABCD56780000ABCD1234ABCD56780000");
test_eq(strlen(data1), 40);
data2 = tor_malloc(FINGERPRINT_LEN+1);
- add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1);
+ crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1);
test_streq(data2, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000");
tor_free(data1);
tor_free(data2);
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
new file mode 100644
index 000000000..7e38ba57d
--- /dev/null
+++ b/src/test/test_extorport.c
@@ -0,0 +1,604 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONNECTION_PRIVATE
+#define EXT_ORPORT_PRIVATE
+#define MAIN_PRIVATE
+#include "or.h"
+#include "buffers.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "config.h"
+#include "control.h"
+#include "ext_orport.h"
+#include "main.h"
+#include "test.h"
+
+/* Test connection_or_remove_from_ext_or_id_map and
+ * connection_or_set_ext_or_identifier */
+static void
+test_ext_or_id_map(void *arg)
+{
+ or_connection_t *c1 = NULL, *c2 = NULL, *c3 = NULL;
+ char *idp = NULL, *idp2 = NULL;
+ (void)arg;
+
+ /* pre-initialization */
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+
+ c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ c2 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ c3 = or_connection_new(CONN_TYPE_OR, AF_INET);
+
+ tt_ptr_op(c1->ext_or_conn_id, !=, NULL);
+ tt_ptr_op(c2->ext_or_conn_id, !=, NULL);
+ tt_ptr_op(c3->ext_or_conn_id, ==, NULL);
+
+ tt_ptr_op(c1, ==, connection_or_get_by_ext_or_id(c1->ext_or_conn_id));
+ tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(c2->ext_or_conn_id));
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx"));
+
+ idp = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+
+ /* Give c2 a new ID. */
+ connection_or_set_ext_or_identifier(c2);
+ test_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ idp2 = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
+ tt_assert(!tor_digest_is_zero(idp2));
+
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(idp2));
+
+ /* Now remove it. */
+ connection_or_remove_from_ext_or_id_map(c2);
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp));
+ tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp2));
+
+ done:
+ if (c1)
+ connection_free_(TO_CONN(c1));
+ if (c2)
+ connection_free_(TO_CONN(c2));
+ if (c3)
+ connection_free_(TO_CONN(c3));
+ tor_free(idp);
+ tor_free(idp2);
+ connection_or_clear_ext_or_id_map();
+}
+
+/* Simple connection_write_to_buf_impl_ replacement that unconditionally
+ * writes to outbuf. */
+static void
+connection_write_to_buf_impl_replacement(const char *string, size_t len,
+ connection_t *conn, int zlib)
+{
+ (void) zlib;
+
+ tor_assert(string);
+ tor_assert(conn);
+ write_to_buf(string, len, conn->outbuf);
+}
+
+static char *
+buf_get_contents(buf_t *buf, size_t *sz_out)
+{
+ char *out;
+ *sz_out = buf_datalen(buf);
+ if (*sz_out >= ULONG_MAX)
+ return NULL; /* C'mon, really? */
+ out = tor_malloc(*sz_out + 1);
+ if (fetch_from_buf(out, (unsigned long)*sz_out, buf) != 0) {
+ tor_free(out);
+ return NULL;
+ }
+ out[*sz_out] = '\0'; /* Hopefully gratuitous. */
+ return out;
+}
+
+static void
+test_ext_or_write_command(void *arg)
+{
+ or_connection_t *c1;
+ char *cp = NULL;
+ char *buf = NULL;
+ size_t sz;
+
+ (void) arg;
+ MOCK(connection_write_to_buf_impl_,
+ connection_write_to_buf_impl_replacement);
+
+ c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ tt_assert(c1);
+
+ /* Length too long */
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 100, "X", 100000),
+ <, 0);
+
+ /* Empty command */
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99, NULL, 0),
+ ==, 0);
+ cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
+ tt_int_op(sz, ==, 4);
+ test_mem_op(cp, ==, "\x00\x99\x00\x00", 4);
+ tor_free(cp);
+
+ /* Medium command. */
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99,
+ "Wai\0Hello", 9), ==, 0);
+ cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
+ tt_int_op(sz, ==, 13);
+ test_mem_op(cp, ==, "\x00\x99\x00\x09Wai\x00Hello", 13);
+ tor_free(cp);
+
+ /* Long command */
+ buf = tor_malloc(65535);
+ memset(buf, 'x', 65535);
+ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0xf00d,
+ buf, 65535), ==, 0);
+ cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
+ tt_int_op(sz, ==, 65539);
+ test_mem_op(cp, ==, "\xf0\x0d\xff\xff", 4);
+ test_mem_op(cp+4, ==, buf, 65535);
+ tor_free(cp);
+
+ done:
+ if (c1)
+ connection_free_(TO_CONN(c1));
+ tor_free(cp);
+ tor_free(buf);
+ UNMOCK(connection_write_to_buf_impl_);
+}
+
+static int
+write_bytes_to_file_fail(const char *fname, const char *str, size_t len,
+ int bin)
+{
+ (void) fname;
+ (void) str;
+ (void) len;
+ (void) bin;
+
+ return -1;
+}
+
+static void
+test_ext_or_init_auth(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ const char *fn;
+ char *cp = NULL;
+ struct stat st;
+ char cookie0[32];
+ (void)arg;
+
+ /* Check default filename location */
+ options->DataDirectory = tor_strdup("foo");
+ cp = get_ext_or_auth_cookie_file_name();
+ tt_str_op(cp, ==, "foo"PATH_SEPARATOR"extended_orport_auth_cookie");
+ tor_free(cp);
+
+ /* Shouldn't be initialized already, or our tests will be a bit
+ * meaningless */
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ test_assert(tor_mem_is_zero((char*)ext_or_auth_cookie, 32));
+
+ /* Now make sure we use a temporary file */
+ fn = get_fname("ext_cookie_file");
+ options->ExtORPortCookieAuthFile = tor_strdup(fn);
+ cp = get_ext_or_auth_cookie_file_name();
+ tt_str_op(cp, ==, fn);
+ tor_free(cp);
+
+ /* Test the initialization function with a broken
+ write_bytes_to_file(). See if the problem is handled properly. */
+ MOCK(write_bytes_to_file, write_bytes_to_file_fail);
+ tt_int_op(-1, ==, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, ==, 0);
+ UNMOCK(write_bytes_to_file);
+
+ /* Now do the actual initialization. */
+ tt_int_op(0, ==, init_ext_or_cookie_authentication(1));
+ tt_int_op(ext_or_auth_cookie_is_set, ==, 1);
+ cp = read_file_to_str(fn, RFTS_BIN, &st);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(st.st_size, ==, 64);
+ test_memeq(cp, "! Extended ORPort Auth Cookie !\x0a", 32);
+ test_memeq(cp+32, ext_or_auth_cookie, 32);
+ memcpy(cookie0, ext_or_auth_cookie, 32);
+ test_assert(!tor_mem_is_zero((char*)ext_or_auth_cookie, 32));
+
+ /* Operation should be idempotent. */
+ tt_int_op(0, ==, init_ext_or_cookie_authentication(1));
+ test_memeq(cookie0, ext_or_auth_cookie, 32);
+
+ done:
+ tor_free(cp);
+ ext_orport_free_all();
+}
+
+static void
+test_ext_or_cookie_auth(void *arg)
+{
+ char *reply=NULL, *reply2=NULL, *client_hash=NULL, *client_hash2=NULL;
+ size_t reply_len=0;
+ char hmac1[32], hmac2[32];
+
+ const char client_nonce[32] =
+ "Who is the third who walks alway";
+ char server_hash_input[] =
+ "ExtORPort authentication server-to-client hash"
+ "Who is the third who walks alway"
+ "................................";
+ char client_hash_input[] =
+ "ExtORPort authentication client-to-server hash"
+ "Who is the third who walks alway"
+ "................................";
+
+ (void)arg;
+
+ tt_int_op(strlen(client_hash_input), ==, 46+32+32);
+ tt_int_op(strlen(server_hash_input), ==, 46+32+32);
+
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ memcpy(ext_or_auth_cookie, "s beside you? When I count, ther", 32);
+ ext_or_auth_cookie_is_set = 1;
+
+ /* For this authentication, the client sends 32 random bytes (ClientNonce)
+ * The server replies with 32 byte ServerHash and 32 byte ServerNonce,
+ * where ServerHash is:
+ * HMAC-SHA256(CookieString,
+ * "ExtORPort authentication server-to-client hash" | ClientNonce |
+ * ServerNonce)"
+ * The client must reply with 32-byte ClientHash, which we compute as:
+ * ClientHash is computed as:
+ * HMAC-SHA256(CookieString,
+ * "ExtORPort authentication client-to-server hash" | ClientNonce |
+ * ServerNonce)
+ */
+
+ /* Wrong length */
+ tt_int_op(-1, ==,
+ handle_client_auth_nonce(client_nonce, 33, &client_hash, &reply,
+ &reply_len));
+ tt_int_op(-1, ==,
+ handle_client_auth_nonce(client_nonce, 31, &client_hash, &reply,
+ &reply_len));
+
+ /* Now let's try this for real! */
+ tt_int_op(0, ==,
+ handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply,
+ &reply_len));
+ tt_int_op(reply_len, ==, 64);
+ tt_ptr_op(reply, !=, NULL);
+ tt_ptr_op(client_hash, !=, NULL);
+ /* Fill in the server nonce into the hash inputs... */
+ memcpy(server_hash_input+46+32, reply+32, 32);
+ memcpy(client_hash_input+46+32, reply+32, 32);
+ /* Check the HMACs are correct... */
+ crypto_hmac_sha256(hmac1, (char*)ext_or_auth_cookie, 32, server_hash_input,
+ 46+32+32);
+ crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
+ 46+32+32);
+ test_memeq(hmac1, reply, 32);
+ test_memeq(hmac2, client_hash, 32);
+
+ /* Now do it again and make sure that the results are *different* */
+ tt_int_op(0, ==,
+ handle_client_auth_nonce(client_nonce, 32, &client_hash2, &reply2,
+ &reply_len));
+ test_memneq(reply2, reply, reply_len);
+ test_memneq(client_hash2, client_hash, 32);
+ /* But that this one checks out too. */
+ memcpy(server_hash_input+46+32, reply2+32, 32);
+ memcpy(client_hash_input+46+32, reply2+32, 32);
+ /* Check the HMACs are correct... */
+ crypto_hmac_sha256(hmac1, (char*)ext_or_auth_cookie, 32, server_hash_input,
+ 46+32+32);
+ crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
+ 46+32+32);
+ test_memeq(hmac1, reply2, 32);
+ test_memeq(hmac2, client_hash2, 32);
+
+ done:
+ tor_free(reply);
+ tor_free(client_hash);
+ tor_free(reply2);
+ tor_free(client_hash2);
+}
+
+static int
+crypto_rand_return_tse_str(char *to, size_t n)
+{
+ if (n != 32) {
+ TT_FAIL(("Asked for %d bytes, not 32", (int)n));
+ return -1;
+ }
+ memcpy(to, "te road There is always another ", 32);
+ return 0;
+}
+
+static void
+test_ext_or_cookie_auth_testvec(void *arg)
+{
+ char *reply=NULL, *client_hash=NULL;
+ size_t reply_len;
+ char *mem_op_hex_tmp=NULL;
+
+ const char client_nonce[] = "But when I look ahead up the whi";
+ (void)arg;
+
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ memcpy(ext_or_auth_cookie, "Gliding wrapt in a brown mantle," , 32);
+ ext_or_auth_cookie_is_set = 1;
+
+ MOCK(crypto_rand, crypto_rand_return_tse_str);
+
+ tt_int_op(0, ==,
+ handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply,
+ &reply_len));
+ tt_ptr_op(reply, !=, NULL );
+ tt_ptr_op(reply_len, ==, 64);
+ test_memeq(reply+32, "te road There is always another ", 32);
+ /* HMACSHA256("Gliding wrapt in a brown mantle,"
+ * "ExtORPort authentication server-to-client hash"
+ * "But when I look ahead up the write road There is always another ");
+ */
+ test_memeq_hex(reply,
+ "ec80ed6e546d3b36fdfc22fe1315416b"
+ "029f1ade7610d910878b62eeb7403821");
+ /* HMACSHA256("Gliding wrapt in a brown mantle,"
+ * "ExtORPort authentication client-to-server hash"
+ * "But when I look ahead up the write road There is always another ");
+ * (Both values computed using Python CLI.)
+ */
+ test_memeq_hex(client_hash,
+ "ab391732dd2ed968cd40c087d1b1f25b"
+ "33b3cd77ff79bd80c2074bbf438119a2");
+
+ done:
+ UNMOCK(crypto_rand);
+ tor_free(reply);
+ tor_free(client_hash);
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+ignore_bootstrap_problem(const char *warn, int reason)
+{
+ (void)warn;
+ (void)reason;
+}
+
+static int is_reading = 1;
+static int handshake_start_called = 0;
+
+static void
+note_read_stopped(connection_t *conn)
+{
+ (void)conn;
+ is_reading=0;
+}
+static void
+note_read_started(connection_t *conn)
+{
+ (void)conn;
+ is_reading=1;
+}
+static int
+handshake_start(or_connection_t *conn, int receiving)
+{
+ if (!conn || !receiving)
+ TT_FAIL(("Bad arguments to handshake_start"));
+ handshake_start_called = 1;
+ return 0;
+}
+
+#define WRITE(s,n) \
+ do { \
+ write_to_buf((s), (n), TO_CONN(conn)->inbuf); \
+ } while (0)
+#define CONTAINS(s,n) \
+ do { \
+ tt_int_op((n), <=, sizeof(b)); \
+ tt_int_op(buf_datalen(TO_CONN(conn)->outbuf), ==, (n)); \
+ if ((n)) { \
+ fetch_from_buf(b, (n), TO_CONN(conn)->outbuf); \
+ test_memeq(b, (s), (n)); \
+ } \
+ } while (0)
+
+/* Helper: Do a successful Extended ORPort authentication handshake. */
+static void
+do_ext_or_handshake(or_connection_t *conn)
+{
+ char b[256];
+
+ tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ CONTAINS("\x01\x00", 2);
+ WRITE("\x01", 1);
+ WRITE("But when I look ahead up the whi", 32);
+ MOCK(crypto_rand, crypto_rand_return_tse_str);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ UNMOCK(crypto_rand);
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH);
+ CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b"
+ "\x02\x9f\x1a\xde\x76\x10\xd9\x10\x87\x8b\x62\xee\xb7\x40\x38\x21"
+ "te road There is always another ", 64);
+ /* Send the right response this time. */
+ WRITE("\xab\x39\x17\x32\xdd\x2e\xd9\x68\xcd\x40\xc0\x87\xd1\xb1\xf2\x5b"
+ "\x33\xb3\xcd\x77\xff\x79\xbd\x80\xc2\x07\x4b\xbf\x43\x81\x19\xa2",
+ 32);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("\x01", 1);
+ tt_assert(! TO_CONN(conn)->marked_for_close);
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_OPEN);
+
+ done: ;
+}
+
+static void
+test_ext_or_handshake(void *arg)
+{
+ or_connection_t *conn=NULL;
+ char b[256];
+
+ (void) arg;
+ MOCK(connection_write_to_buf_impl_,
+ connection_write_to_buf_impl_replacement);
+ /* Use same authenticators as for test_ext_or_cookie_auth_testvec */
+ ext_or_auth_cookie = tor_malloc_zero(32);
+ memcpy(ext_or_auth_cookie, "Gliding wrapt in a brown mantle," , 32);
+ ext_or_auth_cookie_is_set = 1;
+
+ init_connection_lists();
+
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ /* The server starts by telling us about the one supported authtype. */
+ CONTAINS("\x01\x00", 2);
+ /* Say the client hasn't responded yet. */
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ /* Let's say the client replies badly. */
+ WRITE("\x99", 1);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+
+ /* Okay, try again. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ tt_int_op(0, ==, connection_ext_or_start_auth(conn));
+ CONTAINS("\x01\x00", 2);
+ /* Let's say the client replies sensibly this time. "Yes, AUTHTYPE_COOKIE
+ * sounds delicious. Let's have some of that!" */
+ WRITE("\x01", 1);
+ /* Let's say that the client also sends part of a nonce. */
+ WRITE("But when I look ", 16);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_int_op(TO_CONN(conn)->state, ==,
+ EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE);
+ /* Pump it again. Nothing should happen. */
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ /* send the rest of the nonce. */
+ WRITE("ahead up the whi", 16);
+ MOCK(crypto_rand, crypto_rand_return_tse_str);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ UNMOCK(crypto_rand);
+ /* We should get the right reply from the server. */
+ CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b"
+ "\x02\x9f\x1a\xde\x76\x10\xd9\x10\x87\x8b\x62\xee\xb7\x40\x38\x21"
+ "te road There is always another ", 64);
+ /* Send the wrong response. */
+ WRITE("not with a bang but a whimper...", 32);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("\x00", 1);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ /* XXXX Hold-open-until-flushed. */
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ MOCK(connection_start_reading, note_read_started);
+ MOCK(connection_stop_reading, note_read_stopped);
+ MOCK(connection_tls_start_handshake, handshake_start);
+
+ /* Okay, this time let's succeed. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+
+ /* Now let's run through some messages. */
+ /* First let's send some junk and make sure it's ignored. */
+ WRITE("\xff\xf0\x00\x03""ABC", 7);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ /* Now let's send a USERADDR command. */
+ WRITE("\x00\x01\x00\x0c""1.2.3.4:5678", 16);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_int_op(TO_CONN(conn)->port, ==, 5678);
+ tt_int_op(tor_addr_to_ipv4h(&TO_CONN(conn)->addr), ==, 0x01020304);
+ /* Now let's send a TRANSPORT command. */
+ WRITE("\x00\x02\x00\x07""rfc1149", 11);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_ptr_op(NULL, !=, conn->ext_or_transport);
+ tt_str_op("rfc1149", ==, conn->ext_or_transport);
+ tt_int_op(is_reading,==,1);
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_OPEN);
+ /* DONE */
+ WRITE("\x00\x00\x00\x00", 4);
+ tt_int_op(0, ==, connection_ext_or_process_inbuf(conn));
+ tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_FLUSHING);
+ tt_int_op(is_reading,==,0);
+ CONTAINS("\x10\x00\x00\x00", 4);
+ tt_int_op(handshake_start_called,==,0);
+ tt_int_op(0, ==, connection_ext_or_finished_flushing(conn));
+ tt_int_op(is_reading,==,1);
+ tt_int_op(handshake_start_called,==,1);
+ tt_int_op(TO_CONN(conn)->type, ==, CONN_TYPE_OR);
+ tt_int_op(TO_CONN(conn)->state, ==, 0);
+ close_closeable_connections();
+ conn = NULL;
+
+ /* Okay, this time let's succeed the handshake but fail the USERADDR
+ command. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+ /* USERADDR command with an extra NUL byte */
+ WRITE("\x00\x01\x00\x0d""1.2.3.4:5678\x00", 17);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ /* Now fail the TRANSPORT command. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+ /* TRANSPORT command with an extra NUL byte */
+ WRITE("\x00\x02\x00\x08""rfc1149\x00", 12);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ /* Now fail the TRANSPORT command. */
+ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET);
+ do_ext_or_handshake(conn);
+ /* TRANSPORT command with transport name with symbols (not a
+ C-identifier) */
+ WRITE("\x00\x02\x00\x07""rf*1149", 11);
+ MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem);
+ tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn));
+ CONTAINS("", 0);
+ tt_assert(TO_CONN(conn)->marked_for_close);
+ close_closeable_connections();
+ conn = NULL;
+ UNMOCK(control_event_bootstrap_problem);
+
+ done:
+ UNMOCK(connection_write_to_buf_impl_);
+ UNMOCK(crypto_rand);
+ if (conn)
+ connection_free_(TO_CONN(conn));
+#undef CONTAINS
+#undef WRITE
+}
+
+struct testcase_t extorport_tests[] = {
+ { "id_map", test_ext_or_id_map, TT_FORK, NULL, NULL },
+ { "write_command", test_ext_or_write_command, TT_FORK, NULL, NULL },
+ { "init_auth", test_ext_or_init_auth, TT_FORK, NULL, NULL },
+ { "cookie_auth", test_ext_or_cookie_auth, TT_FORK, NULL, NULL },
+ { "cookie_auth_testvec", test_ext_or_cookie_auth_testvec, TT_FORK,
+ NULL, NULL },
+ { "handshake", test_ext_or_handshake, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_options.c b/src/test/test_options.c
new file mode 100644
index 000000000..737f658e2
--- /dev/null
+++ b/src/test/test_options.c
@@ -0,0 +1,170 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONFIG_PRIVATE
+#include "or.h"
+#include "confparse.h"
+#include "config.h"
+#include "test.h"
+
+typedef struct {
+ int severity;
+ uint32_t domain;
+ char *msg;
+} logmsg_t;
+
+static smartlist_t *messages = NULL;
+
+static void
+log_cback(int severity, uint32_t domain, const char *msg)
+{
+ logmsg_t *x = tor_malloc(sizeof(*x));
+ x->severity = severity;
+ x->domain = domain;
+ x->msg = tor_strdup(msg);
+ if (!messages)
+ messages = smartlist_new();
+ smartlist_add(messages, x);
+}
+
+static void
+setup_log_callback(void)
+{
+ log_severity_list_t lst;
+ memset(&lst, 0, sizeof(lst));
+ lst.masks[LOG_ERR - LOG_ERR] = ~0;
+ lst.masks[LOG_WARN - LOG_ERR] = ~0;
+ lst.masks[LOG_NOTICE - LOG_ERR] = ~0;
+ add_callback_log(&lst, log_cback);
+}
+
+static char *
+dump_logs(void)
+{
+ smartlist_t *msgs;
+ char *out;
+ if (! messages)
+ return tor_strdup("");
+ msgs = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(messages, logmsg_t *, x) {
+ smartlist_add_asprintf(msgs, "[%s] %s",
+ log_level_to_string(x->severity), x->msg);
+ } SMARTLIST_FOREACH_END(x);
+ out = smartlist_join_strings(msgs, "", 0, NULL);
+ SMARTLIST_FOREACH(msgs, char *, cp, tor_free(cp));
+ smartlist_free(msgs);
+ return out;
+}
+
+static void
+clear_log_messages(void)
+{
+ if (!messages)
+ return;
+ SMARTLIST_FOREACH(messages, logmsg_t *, m,
+ { tor_free(m->msg); tor_free(m); });
+ smartlist_free(messages);
+ messages = NULL;
+}
+
+static void
+test_options_validate_impl(const char *configuration,
+ const char *expect_errmsg,
+ int expect_log_severity,
+ const char *expect_log)
+{
+ or_options_t *opt = options_new();
+ or_options_t *dflt;
+ config_line_t *cl=NULL;
+ char *msg=NULL;
+ int r;
+ opt->command = CMD_RUN_TOR;
+ options_init(opt);
+
+ dflt = config_dup(&options_format, opt);
+ clear_log_messages();
+
+ r = config_get_lines(configuration, &cl, 1);
+ tt_int_op(r, ==, 0);
+
+ r = config_assign(&options_format, opt, cl, 0, 0, &msg);
+ tt_int_op(r, ==, 0);
+
+ r = options_validate(NULL, opt, dflt, 0, &msg);
+ if (expect_errmsg && !msg) {
+ TT_DIE(("Expected error message <%s> from <%s>, but got none.",
+ expect_errmsg, configuration));
+ } else if (expect_errmsg && !strstr(msg, expect_errmsg)) {
+ TT_DIE(("Expected error message <%s> from <%s>, but got <%s>.",
+ expect_errmsg, configuration, msg));
+ } else if (!expect_errmsg && msg) {
+ TT_DIE(("Expected no error message from <%s> but got <%s>.",
+ configuration, msg));
+ }
+ tt_int_op((r == 0), ==, (msg == NULL));
+
+ if (expect_log) {
+ int found = 0;
+ if (messages) {
+ SMARTLIST_FOREACH_BEGIN(messages, logmsg_t *, m) {
+ if (m->severity == expect_log_severity &&
+ strstr(m->msg, expect_log)) {
+ found = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(m);
+ }
+ if (!found) {
+ tor_free(msg);
+ msg = dump_logs();
+ TT_DIE(("Expected log message [%s] %s from <%s>, but got <%s>.",
+ log_level_to_string(expect_log_severity), expect_log,
+ configuration, msg));
+ }
+ }
+
+ done:
+ config_free_lines(cl);
+ or_options_free(opt);
+ or_options_free(dflt);
+ tor_free(msg);
+ clear_log_messages();
+}
+
+#define WANT_ERR(config, msg) \
+ test_options_validate_impl((config), (msg), 0, NULL)
+#define WANT_LOG(config, severity, msg) \
+ test_options_validate_impl((config), NULL, (severity), (msg))
+#define WANT_ERR_LOG(config, msg, severity, logmsg) \
+ test_options_validate_impl((config), (msg), (severity), (logmsg))
+#define OK(config) \
+ test_options_validate_impl((config), NULL, 0, NULL)
+
+static void
+test_options_validate(void *arg)
+{
+ (void)arg;
+ setup_log_callback();
+
+ WANT_ERR("ExtORPort 500000", "Invalid ExtORPort");
+
+ WANT_ERR_LOG("ServerTransportOptions trebuchet",
+ "ServerTransportOptions did not parse",
+ LOG_WARN, "Too few arguments");
+ OK("ServerTransportOptions trebuchet sling=snappy");
+ OK("ServerTransportOptions trebuchet sling=");
+ WANT_ERR_LOG("ServerTransportOptions trebuchet slingsnappy",
+ "ServerTransportOptions did not parse",
+ LOG_WARN, "\"slingsnappy\" is not a k=v");
+
+ clear_log_messages();
+ return;
+}
+
+struct testcase_t options_tests[] = {
+ { "validate", test_options_validate, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index d4cc0ae97..433f85dfb 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -5,9 +5,15 @@
#include "orconfig.h"
#define PT_PRIVATE
+#define UTIL_PRIVATE
+#define STATEFILE_PRIVATE
#include "or.h"
+#include "config.h"
+#include "confparse.h"
#include "transports.h"
#include "circuitbuild.h"
+#include "util.h"
+#include "statefile.h"
#include "test.h"
static void
@@ -22,6 +28,8 @@ static void
test_pt_parsing(void)
{
char line[200];
+ transport_t *transport = NULL;
+ tor_addr_t test_addr;
managed_proxy_t *mp = tor_malloc(sizeof(managed_proxy_t));
mp->conf_state = PT_PROTO_INFANT;
@@ -48,7 +56,17 @@ test_pt_parsing(void)
/* correct line */
strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
test_assert(parse_cmethod_line(line, mp) == 0);
- test_assert(smartlist_len(mp->transports));
+ test_assert(smartlist_len(mp->transports) == 1);
+ transport = smartlist_get(mp->transports, 0);
+ /* test registered address of transport */
+ tor_addr_parse(&test_addr, "127.0.0.1");
+ test_assert(tor_addr_eq(&test_addr, &transport->addr));
+ /* test registered port of transport */
+ test_assert(transport->port == 1999);
+ /* test registered SOCKS version of transport */
+ test_assert(transport->socks_version == PROXY_SOCKS5);
+ /* test registered name of transport */
+ test_streq(transport->name, "trebuchet");
reset_mp(mp);
@@ -65,11 +83,37 @@ test_pt_parsing(void)
reset_mp(mp);
/* cowwect */
- strlcpy(line,"SMETHOD trebuchy 127.0.0.1:1999",sizeof(line));
+ strlcpy(line,"SMETHOD trebuchy 127.0.0.2:2999",sizeof(line));
test_assert(parse_smethod_line(line, mp) == 0);
+ test_assert(smartlist_len(mp->transports) == 1);
+ transport = smartlist_get(mp->transports, 0);
+ /* test registered address of transport */
+ tor_addr_parse(&test_addr, "127.0.0.2");
+ test_assert(tor_addr_eq(&test_addr, &transport->addr));
+ /* test registered port of transport */
+ test_assert(transport->port == 2999);
+ /* test registered name of transport */
+ test_streq(transport->name, "trebuchy");
reset_mp(mp);
+ /* Include some arguments. Good ones. */
+ strlcpy(line,"SMETHOD trebuchet 127.0.0.1:9999 "
+ "ARGS:counterweight=3,sling=snappy",
+ sizeof(line));
+ test_assert(parse_smethod_line(line, mp) == 0);
+ tt_int_op(1, ==, smartlist_len(mp->transports));
+ {
+ const transport_t *transport = smartlist_get(mp->transports, 0);
+ tt_assert(transport);
+ tt_str_op(transport->name, ==, "trebuchet");
+ tt_int_op(transport->port, ==, 9999);
+ tt_str_op(fmt_addr(&transport->addr), ==, "127.0.0.1");
+ tt_str_op(transport->extra_info_args, ==,
+ "counterweight=3,sling=snappy");
+ }
+ reset_mp(mp);
+
/* unsupported version */
strlcpy(line,"VERSION 666",sizeof(line));
test_assert(parse_version(line, mp) < 0);
@@ -87,6 +131,58 @@ test_pt_parsing(void)
}
static void
+test_pt_get_transport_options(void *arg)
+{
+ char **execve_args;
+ smartlist_t *transport_list = smartlist_new();
+ managed_proxy_t *mp;
+ or_options_t *options = get_options_mutable();
+ char *opt_str = NULL;
+ config_line_t *cl = NULL;
+ (void)arg;
+
+ execve_args = tor_malloc(sizeof(char*)*2);
+ execve_args[0] = tor_strdup("cheeseshop");
+ execve_args[1] = NULL;
+
+ mp = managed_proxy_create(transport_list, execve_args, 1);
+ tt_ptr_op(mp, !=, NULL);
+ opt_str = get_transport_options_for_server_proxy(mp);
+ tt_ptr_op(opt_str, ==, NULL);
+
+ smartlist_add(mp->transports_to_launch, tor_strdup("gruyere"));
+ smartlist_add(mp->transports_to_launch, tor_strdup("roquefort"));
+ smartlist_add(mp->transports_to_launch, tor_strdup("stnectaire"));
+
+ tt_assert(options);
+
+ cl = tor_malloc_zero(sizeof(config_line_t));
+ cl->value = tor_strdup("gruyere melty=10 hardness=se;ven");
+ options->ServerTransportOptions = cl;
+
+ cl = tor_malloc_zero(sizeof(config_line_t));
+ cl->value = tor_strdup("stnectaire melty=4 hardness=three");
+ cl->next = options->ServerTransportOptions;
+ options->ServerTransportOptions = cl;
+
+ cl = tor_malloc_zero(sizeof(config_line_t));
+ cl->value = tor_strdup("pepperjack melty=12 hardness=five");
+ cl->next = options->ServerTransportOptions;
+ options->ServerTransportOptions = cl;
+
+ opt_str = get_transport_options_for_server_proxy(mp);
+ tt_str_op(opt_str, ==,
+ "gruyere:melty=10;gruyere:hardness=se\\;ven;"
+ "stnectaire:melty=4;stnectaire:hardness=three");
+
+ done:
+ tor_free(opt_str);
+ config_free_lines(cl);
+ managed_proxy_destroy(mp, 0);
+ smartlist_free(transport_list);
+}
+
+static void
test_pt_protocol(void)
{
char line[200];
@@ -132,12 +228,181 @@ test_pt_protocol(void)
tor_free(mp);
}
+static void
+test_pt_get_extrainfo_string(void *arg)
+{
+ managed_proxy_t *mp1 = NULL, *mp2 = NULL;
+ char **argv1, **argv2;
+ smartlist_t *t1 = smartlist_new(), *t2 = smartlist_new();
+ int r;
+ char *s = NULL;
+ (void) arg;
+
+ argv1 = tor_malloc_zero(sizeof(char*)*3);
+ argv1[0] = tor_strdup("ewige");
+ argv1[1] = tor_strdup("Blumenkraft");
+ argv1[2] = NULL;
+ argv2 = tor_malloc_zero(sizeof(char*)*4);
+ argv2[0] = tor_strdup("und");
+ argv2[1] = tor_strdup("ewige");
+ argv2[2] = tor_strdup("Schlangenkraft");
+ argv2[3] = NULL;
+
+ mp1 = managed_proxy_create(t1, argv1, 1);
+ mp2 = managed_proxy_create(t2, argv2, 1);
+
+ r = parse_smethod_line("SMETHOD hagbard 127.0.0.1:5555", mp1);
+ tt_int_op(r, ==, 0);
+ r = parse_smethod_line("SMETHOD celine 127.0.0.1:1723 ARGS:card=no-enemy",
+ mp2);
+ tt_int_op(r, ==, 0);
+
+ /* Force these proxies to look "completed" or they won't generate output. */
+ mp1->conf_state = mp2->conf_state = PT_PROTO_COMPLETED;
+
+ s = pt_get_extra_info_descriptor_string();
+ tt_assert(s);
+ tt_str_op(s, ==,
+ "transport hagbard 127.0.0.1:5555\n"
+ "transport celine 127.0.0.1:1723 card=no-enemy\n");
+
+ done:
+ /* XXXX clean up better */
+ smartlist_free(t1);
+ smartlist_free(t2);
+ tor_free(s);
+}
+
+#ifdef _WIN32
+#define STDIN_HANDLE HANDLE
+#else
+#define STDIN_HANDLE FILE
+#endif
+
+static smartlist_t *
+tor_get_lines_from_handle_replacement(STDIN_HANDLE *handle,
+ enum stream_status *stream_status_out)
+{
+ static int times_called = 0;
+ smartlist_t *retval_sl = smartlist_new();
+
+ (void) handle;
+ (void) stream_status_out;
+
+ /* Generate some dummy CMETHOD lines the first 5 times. The 6th
+ time, send 'CMETHODS DONE' to finish configuring the proxy. */
+ if (times_called++ != 5) {
+ smartlist_add_asprintf(retval_sl, "SMETHOD mock%d 127.0.0.1:555%d",
+ times_called, times_called);
+ } else {
+ smartlist_add(retval_sl, tor_strdup("SMETHODS DONE"));
+ }
+
+ return retval_sl;
+}
+
+/* NOP mock */
+static void
+tor_process_handle_destroy_replacement(process_handle_t *process_handle,
+ int also_terminate_process)
+{
+ (void) process_handle;
+ (void) also_terminate_process;
+}
+
+static or_state_t *dummy_state = NULL;
+
+static or_state_t *
+get_or_state_replacement(void)
+{
+ return dummy_state;
+}
+
+/* Test the configure_proxy() function. */
+static void
+test_pt_configure_proxy(void *arg)
+{
+ int i, retval;
+ managed_proxy_t *mp = NULL;
+ (void) arg;
+
+ dummy_state = tor_malloc_zero(sizeof(or_state_t));
+
+ MOCK(tor_get_lines_from_handle,
+ tor_get_lines_from_handle_replacement);
+ MOCK(tor_process_handle_destroy,
+ tor_process_handle_destroy_replacement);
+ MOCK(get_or_state,
+ get_or_state_replacement);
+
+ mp = tor_malloc(sizeof(managed_proxy_t));
+ mp->conf_state = PT_PROTO_ACCEPTING_METHODS;
+ mp->transports = smartlist_new();
+ mp->transports_to_launch = smartlist_new();
+ mp->process_handle = tor_malloc_zero(sizeof(process_handle_t));
+ mp->argv = tor_malloc_zero(sizeof(char*)*2);
+ mp->argv[0] = tor_strdup("<testcase>");
+ mp->is_server = 1;
+
+ /* Test the return value of configure_proxy() by calling it some
+ times while it is uninitialized and then finally finalizing its
+ configuration. */
+ for (i = 0 ; i < 5 ; i++) {
+ retval = configure_proxy(mp);
+ /* retval should be zero because proxy hasn't finished configuring yet */
+ test_assert(retval == 0);
+ /* check the number of registered transports */
+ test_assert(smartlist_len(mp->transports) == i+1);
+ /* check that the mp is still waiting for transports */
+ test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
+ }
+
+ /* this last configure_proxy() should finalize the proxy configuration. */
+ retval = configure_proxy(mp);
+ /* retval should be 1 since the proxy finished configuring */
+ test_assert(retval == 1);
+ /* check the mp state */
+ test_assert(mp->conf_state == PT_PROTO_COMPLETED);
+
+ { /* check that the transport info were saved properly in the tor state */
+ config_line_t *transport_in_state = NULL;
+ smartlist_t *transport_info_sl = smartlist_new();
+ char *name_of_transport = NULL;
+ char *bindaddr = NULL;
+
+ /* Get the bindaddr for "mock1" and check it against the bindaddr
+ that the mocked tor_get_lines_from_handle() generated. */
+ transport_in_state = get_transport_in_state_by_name("mock1");
+ test_assert(transport_in_state);
+ smartlist_split_string(transport_info_sl, transport_in_state->value,
+ NULL, 0, 0);
+ name_of_transport = smartlist_get(transport_info_sl, 0);
+ bindaddr = smartlist_get(transport_info_sl, 1);
+ tt_str_op(name_of_transport, ==, "mock1");
+ tt_str_op(bindaddr, ==, "127.0.0.1:5551");
+
+ SMARTLIST_FOREACH(transport_info_sl, char *, cp, tor_free(cp));
+ smartlist_free(transport_info_sl);
+ }
+
+ done:
+ tor_free(dummy_state);
+ UNMOCK(tor_get_lines_from_handle);
+ UNMOCK(tor_process_handle_destroy);
+}
+
#define PT_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_pt_ ## name }
struct testcase_t pt_tests[] = {
PT_LEGACY(parsing),
PT_LEGACY(protocol),
+ { "get_transport_options", test_pt_get_transport_options, TT_FORK,
+ NULL, NULL },
+ { "get_extrainfo_string", test_pt_get_extrainfo_string, TT_FORK,
+ NULL, NULL },
+ { "configure_proxy",test_pt_configure_proxy, TT_FORK,
+ NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_replay.c b/src/test/test_replay.c
index de841ad59..b48f582f5 100644
--- a/src/test/test_replay.c
+++ b/src/test/test_replay.c
@@ -32,6 +32,40 @@ test_replaycache_alloc(void)
}
static void
+test_replaycache_badalloc(void)
+{
+ replaycache_t *r = NULL;
+
+ /* Negative horizon should fail */
+ r = replaycache_new(-600, 300);
+ test_assert(r == NULL);
+ /* Negative interval should get adjusted to zero */
+ r = replaycache_new(600, -300);
+ test_assert(r != NULL);
+ test_eq(r->scrub_interval, 0);
+ replaycache_free(r);
+ /* Negative horizon and negative interval should still fail */
+ r = replaycache_new(-600, -300);
+ test_assert(r == NULL);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_free_null(void)
+{
+ replaycache_free(NULL);
+ /* Assert that we're here without horrible death */
+ test_assert(1);
+
+ done:
+ return;
+}
+
+static void
test_replaycache_miss(void)
{
replaycache_t *r = NULL;
@@ -42,7 +76,13 @@ test_replaycache_miss(void)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ /* poke the bad-parameter error case too */
+ result =
+ replaycache_add_and_test_internal(1200, NULL, test_buffer,
+ strlen(test_buffer), NULL);
test_eq(result, 0);
done:
@@ -62,12 +102,12 @@ test_replaycache_hit(void)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 1);
done:
@@ -87,17 +127,17 @@ test_replaycache_age(void)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 1);
result =
replaycache_add_and_test_internal(3000, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 0);
done:
@@ -118,12 +158,12 @@ test_replaycache_elapsed(void)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
- (int)strlen(test_buffer), &elapsed);
+ strlen(test_buffer), &elapsed);
test_eq(result, 1);
test_eq(elapsed, 100);
@@ -144,18 +184,102 @@ test_replaycache_noexpire(void)
result =
replaycache_add_and_test_internal(1200, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 0);
result =
replaycache_add_and_test_internal(1300, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
test_eq(result, 1);
result =
replaycache_add_and_test_internal(3000, r, test_buffer,
- (int)strlen(test_buffer), NULL);
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_scrub(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ /* Set up like in test_replaycache_hit() */
+ result =
+ replaycache_add_and_test_internal(100, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ /*
+ * Poke a few replaycache_scrub_if_needed_internal() error cases that
+ * can't happen through replaycache_add_and_test_internal()
+ */
+
+ /* Null cache */
+ replaycache_scrub_if_needed_internal(300, NULL);
+ /* Assert we're still here */
+ test_assert(1);
+
+ /* Make sure we hit the aging-out case too */
+ replaycache_scrub_if_needed_internal(1500, r);
+ /* Assert that we aged it */
+ test_eq(digestmap_size(r->digests_seen), 0);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_future(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+ time_t elapsed = 0;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ /* Set up like in test_replaycache_hit() */
+ result =
+ replaycache_add_and_test_internal(100, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 0);
+ /* elapsed should still be 0, since it wasn't written */
+ test_eq(elapsed, 0);
+
+ result =
+ replaycache_add_and_test_internal(200, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 1);
+ /* elapsed should be the time since the last hit */
+ test_eq(elapsed, 100);
+
+ /*
+ * Now let's turn the clock back to get coverage on the cache entry from the
+ * future not-supposed-to-happen case.
+ */
+ result =
+ replaycache_add_and_test_internal(150, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ /* We should still get a hit */
test_eq(result, 1);
+ /* ...but it shouldn't let us see a negative elapsed time */
+ test_eq(elapsed, 0);
done:
if (r) replaycache_free(r);
@@ -163,16 +287,62 @@ test_replaycache_noexpire(void)
return;
}
+static void
+test_replaycache_realtime(void)
+{
+ replaycache_t *r = NULL;
+ /*
+ * Negative so we fail if replaycache_add_test_and_elapsed() doesn't
+ * write to elapsed.
+ */
+ time_t elapsed = -1;
+ int result;
+
+ /* Test the realtime as well as *_internal() entry points */
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ /* This should miss */
+ result =
+ replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
+ test_eq(result, 0);
+
+ /* This should hit */
+ result =
+ replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
+ test_eq(result, 1);
+
+ /* This should hit and return a small elapsed time */
+ result =
+ replaycache_add_test_and_elapsed(r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 1);
+ test_assert(elapsed >= 0);
+ test_assert(elapsed <= 5);
+
+ /* Scrub it to exercise that entry point too */
+ replaycache_scrub_if_needed(r);
+
+ done:
+ if (r) replaycache_free(r);
+ return;
+}
+
#define REPLAYCACHE_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_replaycache_ ## name }
struct testcase_t replaycache_tests[] = {
REPLAYCACHE_LEGACY(alloc),
+ REPLAYCACHE_LEGACY(badalloc),
+ REPLAYCACHE_LEGACY(free_null),
REPLAYCACHE_LEGACY(miss),
REPLAYCACHE_LEGACY(hit),
REPLAYCACHE_LEGACY(age),
REPLAYCACHE_LEGACY(elapsed),
REPLAYCACHE_LEGACY(noexpire),
+ REPLAYCACHE_LEGACY(scrub),
+ REPLAYCACHE_LEGACY(future),
+ REPLAYCACHE_LEGACY(realtime),
END_OF_TESTCASES
};
diff --git a/src/test/test_socks.c b/src/test/test_socks.c
new file mode 100644
index 000000000..4ce61e068
--- /dev/null
+++ b/src/test/test_socks.c
@@ -0,0 +1,393 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "buffers.h"
+#include "config.h"
+#include "test.h"
+
+typedef struct socks_test_data_t {
+ socks_request_t *req;
+ buf_t *buf;
+} socks_test_data_t;
+
+static void *
+socks_test_setup(const struct testcase_t *testcase)
+{
+ socks_test_data_t *data = tor_malloc(sizeof(socks_test_data_t));
+ (void)testcase;
+ data->buf = buf_new_with_capacity(256);
+ data->req = socks_request_new();
+ config_register_addressmaps(get_options());
+ return data;
+}
+static int
+socks_test_cleanup(const struct testcase_t *testcase, void *ptr)
+{
+ socks_test_data_t *data = ptr;
+ (void)testcase;
+ buf_free(data->buf);
+ socks_request_free(data->req);
+ tor_free(data);
+ return 1;
+}
+
+const struct testcase_setup_t socks_setup = {
+ socks_test_setup, socks_test_cleanup
+};
+
+#define SOCKS_TEST_INIT() \
+ socks_test_data_t *testdata = ptr; \
+ buf_t *buf = testdata->buf; \
+ socks_request_t *socks = testdata->req;
+#define ADD_DATA(buf, s) \
+ write_to_buf(s, sizeof(s)-1, buf)
+
+static void
+socks_request_clear(socks_request_t *socks)
+{
+ tor_free(socks->username);
+ tor_free(socks->password);
+ memset(socks, 0, sizeof(socks_request_t));
+}
+
+/** Perform unsupported SOCKS 4 commands */
+static void
+test_socks_4_unsupported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == -1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+
+ done:
+ ;
+}
+
+/** Perform supported SOCKS 4 commands */
+static void
+test_socks_4_supported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */
+ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_eq(SOCKS_COMMAND_CONNECT, socks->command);
+ test_streq("2.2.2.3", socks->address);
+ test_eq(4370, socks->port);
+ test_assert(socks->got_auth == 0);
+ test_assert(! socks->username);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/
+ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_eq(SOCKS_COMMAND_CONNECT, socks->command);
+ test_streq("2.2.2.4", socks->address);
+ test_eq(4370, socks->port);
+ test_assert(socks->got_auth == 1);
+ test_assert(socks->username);
+ test_eq(2, socks->usernamelen);
+ test_memeq("me", socks->username, 2);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */
+ ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(4, socks->socks_version);
+ test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */
+ test_streq("torproject.org", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+
+ done:
+ ;
+}
+
+/** Perform unsupported SOCKS 5 commands */
+static void
+test_socks_5_unsupported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send unsupported BIND [02] command */
+ ADD_DATA(buf, "\x05\x02\x00\x01");
+
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(0, buf_datalen(buf));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), -1);
+ /* XXX: shouldn't tor reply 'command not supported' [07]? */
+
+ buf_clear(buf);
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
+ ADD_DATA(buf, "\x05\x03\x00\x01\x02");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(2, socks->reply[1]);
+ ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), -1);
+ /* XXX: shouldn't tor reply 'command not supported' [07]? */
+
+ done:
+ ;
+}
+
+/** Perform supported SOCKS 5 commands */
+static void
+test_socks_5_supported_commands(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 0);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 1);
+ test_streq("2.2.2.2", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11");
+ test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks), 1);
+
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("torproject.org", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("torproject.org", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+ socks_request_clear(socks);
+
+ /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
+ ADD_DATA(buf, "\x05\x01\x00");
+ ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
+ test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+ test_streq("2.2.2.5", socks->address);
+
+ test_eq(0, buf_datalen(buf));
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication */
+static void
+test_socks_5_no_authenticate(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /*SOCKS 5 No Authentication */
+ ADD_DATA(buf,"\x05\x01\x00");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_NO_AUTH, socks->reply[1]);
+
+ test_eq(0, buf_datalen(buf));
+
+ /*SOCKS 5 Send username/password anyway - pretend to be broken */
+ ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(1, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(2, socks->passwordlen);
+
+ test_memeq("\x01\x01", socks->username, 2);
+ test_memeq("\x01\x01", socks->password, 2);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication */
+static void
+test_socks_5_authenticate(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Negotiate username/password authentication */
+ ADD_DATA(buf, "\x05\x01\x02");
+
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_USER_PASS, socks->reply[1]);
+ test_eq(5, socks->socks_version);
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 5 Send username/password */
+ ADD_DATA(buf, "\x01\x02me\x08mypasswd");
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(1, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(8, socks->passwordlen);
+
+ test_memeq("me", socks->username, 2);
+ test_memeq("mypasswd", socks->password, 8);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication and send data all in one go */
+static void
+test_socks_5_authenticate_with_data(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Negotiate username/password authentication */
+ ADD_DATA(buf, "\x05\x01\x02");
+
+ test_assert(!fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks));
+ test_eq(2, socks->replylen);
+ test_eq(5, socks->reply[0]);
+ test_eq(SOCKS_USER_PASS, socks->reply[1]);
+ test_eq(5, socks->socks_version);
+
+ test_eq(0, buf_datalen(buf));
+
+ /* SOCKS 5 Send username/password */
+ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
+ ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
+ test_assert(fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks) == 1);
+ test_eq(5, socks->socks_version);
+ test_eq(2, socks->replylen);
+ test_eq(1, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ test_streq("2.2.2.2", socks->address);
+ test_eq(4369, socks->port);
+
+ test_eq(2, socks->usernamelen);
+ test_eq(3, socks->passwordlen);
+ test_memeq("me", socks->username, 2);
+ test_memeq("you", socks->password, 3);
+
+ done:
+ ;
+}
+
+/** Perform SOCKS 5 authentication before method negotiated */
+static void
+test_socks_5_auth_before_negotiation(void *ptr)
+{
+ SOCKS_TEST_INIT();
+
+ /* SOCKS 5 Send username/password */
+ ADD_DATA(buf, "\x01\x02me\x02me");
+ test_assert(fetch_from_buf_socks(buf, socks,
+ get_options()->TestSocks,
+ get_options()->SafeSocks) == -1);
+ test_eq(0, socks->socks_version);
+ test_eq(0, socks->replylen);
+ test_eq(0, socks->reply[0]);
+ test_eq(0, socks->reply[1]);
+
+ done:
+ ;
+}
+
+#define SOCKSENT(name) \
+ { #name, test_socks_##name, TT_FORK, &socks_setup, NULL }
+
+struct testcase_t socks_tests[] = {
+ SOCKSENT(4_unsupported_commands),
+ SOCKSENT(4_supported_commands),
+
+ SOCKSENT(5_unsupported_commands),
+ SOCKSENT(5_supported_commands),
+ SOCKSENT(5_no_authenticate),
+ SOCKSENT(5_auth_before_negotiation),
+ SOCKSENT(5_authenticate),
+ SOCKSENT(5_authenticate_with_data),
+
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 53626bb00..05d28d787 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -4,6 +4,7 @@
/* See LICENSE for licensing information */
#include "orconfig.h"
+#define COMPAT_PRIVATE
#define CONTROL_PRIVATE
#define MEMPOOL_PRIVATE
#define UTIL_PRIVATE
@@ -796,37 +797,37 @@ test_util_expand_filename(void)
}
#endif
-/** Test tor_escape_str_for_socks_arg(). */
+/** Test tor_escape_str_for_pt_args(). */
static void
test_util_escape_string_socks(void)
{
char *escaped_string = NULL;
/** Simple backslash escape. */
- escaped_string = tor_escape_str_for_socks_arg("This is a backslash: \\");
+ escaped_string = tor_escape_str_for_pt_args("This is a backslash: \\",";\\");
test_assert(escaped_string);
test_streq(escaped_string, "This is a backslash: \\\\");
tor_free(escaped_string);
/** Simple semicolon escape. */
- escaped_string = tor_escape_str_for_socks_arg("First rule: Do not use ;");
+ escaped_string = tor_escape_str_for_pt_args("First rule:Do not use ;",";\\");
test_assert(escaped_string);
- test_streq(escaped_string, "First rule: Do not use \\;");
+ test_streq(escaped_string, "First rule:Do not use \\;");
tor_free(escaped_string);
/** Empty string. */
- escaped_string = tor_escape_str_for_socks_arg("");
+ escaped_string = tor_escape_str_for_pt_args("", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "");
tor_free(escaped_string);
/** Escape all characters. */
- escaped_string = tor_escape_str_for_socks_arg(";\\;\\");
+ escaped_string = tor_escape_str_for_pt_args(";\\;\\", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "\\;\\\\\\;\\\\");
tor_free(escaped_string);
- escaped_string = tor_escape_str_for_socks_arg(";");
+ escaped_string = tor_escape_str_for_pt_args(";", ";\\");
test_assert(escaped_string);
test_streq(escaped_string, "\\;");
tor_free(escaped_string);
@@ -2281,6 +2282,7 @@ test_util_load_win_lib(void *ptr)
}
#endif
+#ifndef _WIN32
static void
clear_hex_errno(char *hex_errno)
{
@@ -2324,6 +2326,7 @@ test_util_exit_status(void *ptr)
done:
;
}
+#endif
#ifndef _WIN32
/** Check that fgets waits until a full line, and not return a partial line, on
@@ -2625,14 +2628,14 @@ test_util_spawn_background_partial_read(void *ptr)
}
/**
- * Test for format_hex_number_for_helper_exit_status()
+ * Test for format_hex_number_sigsafe()
*/
static void
test_util_format_hex_number(void *ptr)
{
int i, len;
- char buf[HEX_ERRNO_SIZE + 1];
+ char buf[33];
const struct {
const char *str;
unsigned int x;
@@ -2641,6 +2644,8 @@ test_util_format_hex_number(void *ptr)
{"1", 1},
{"273A", 0x273a},
{"FFFF", 0xffff},
+ {"7FFFFFFF", 0x7fffffff},
+ {"FFFFFFFF", 0xffffffff},
#if UINT_MAX >= 0xffffffff
{"31BC421D", 0x31bc421d},
{"FFFFFFFF", 0xffffffff},
@@ -2651,19 +2656,23 @@ test_util_format_hex_number(void *ptr)
(void)ptr;
for (i = 0; test_data[i].str != NULL; ++i) {
- len = format_hex_number_for_helper_exit_status(test_data[i].x,
- buf, HEX_ERRNO_SIZE);
+ len = format_hex_number_sigsafe(test_data[i].x, buf, sizeof(buf));
test_neq(len, 0);
- buf[len] = '\0';
+ test_eq(len, strlen(buf));
test_streq(buf, test_data[i].str);
}
+ test_eq(4, format_hex_number_sigsafe(0xffff, buf, 5));
+ test_streq(buf, "FFFF");
+ test_eq(0, format_hex_number_sigsafe(0xffff, buf, 4));
+ test_eq(0, format_hex_number_sigsafe(0, buf, 1));
+
done:
return;
}
/**
- * Test that we can properly format q Windows command line
+ * Test that we can properly format a Windows command line
*/
static void
test_util_join_win_cmdline(void *ptr)
@@ -3311,6 +3320,134 @@ test_util_strclear(void *arg)
#define UTIL_TEST(name, flags) \
{ #name, test_util_ ## name, flags, NULL, NULL }
+#ifdef FD_CLOEXEC
+#define CAN_CHECK_CLOEXEC
+static int
+fd_is_cloexec(tor_socket_t fd)
+{
+ int flags = fcntl(fd, F_GETFD, 0);
+ return (flags & FD_CLOEXEC) == FD_CLOEXEC;
+}
+#endif
+
+#ifndef _WIN32
+#define CAN_CHECK_NONBLOCK
+static int
+fd_is_nonblocking(tor_socket_t fd)
+{
+ int flags = fcntl(fd, F_GETFL, 0);
+ return (flags & O_NONBLOCK) == O_NONBLOCK;
+}
+#endif
+
+static void
+test_util_socket(void *arg)
+{
+ tor_socket_t fd1 = TOR_INVALID_SOCKET;
+ tor_socket_t fd2 = TOR_INVALID_SOCKET;
+ tor_socket_t fd3 = TOR_INVALID_SOCKET;
+ tor_socket_t fd4 = TOR_INVALID_SOCKET;
+ int n = get_n_open_sockets();
+
+ TT_BLATHER(("Starting with %d open sockets.", n));
+
+ (void)arg;
+
+ fd1 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 0, 0);
+ fd2 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 0, 1);
+ tt_assert(SOCKET_OK(fd1));
+ tt_assert(SOCKET_OK(fd2));
+ tt_int_op(get_n_open_sockets(), ==, n + 2);
+ //fd3 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 1, 0);
+ //fd4 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 1, 1);
+ fd3 = tor_open_socket(AF_INET, SOCK_STREAM, 0);
+ fd4 = tor_open_socket_nonblocking(AF_INET, SOCK_STREAM, 0);
+ tt_assert(SOCKET_OK(fd3));
+ tt_assert(SOCKET_OK(fd4));
+ tt_int_op(get_n_open_sockets(), ==, n + 4);
+
+#ifdef CAN_CHECK_CLOEXEC
+ tt_int_op(fd_is_cloexec(fd1), ==, 0);
+ tt_int_op(fd_is_cloexec(fd2), ==, 0);
+ tt_int_op(fd_is_cloexec(fd3), ==, 1);
+ tt_int_op(fd_is_cloexec(fd4), ==, 1);
+#endif
+#ifdef CAN_CHECK_NONBLOCK
+ tt_int_op(fd_is_nonblocking(fd1), ==, 0);
+ tt_int_op(fd_is_nonblocking(fd2), ==, 1);
+ tt_int_op(fd_is_nonblocking(fd3), ==, 0);
+ tt_int_op(fd_is_nonblocking(fd4), ==, 1);
+#endif
+
+ tor_close_socket(fd1);
+ tor_close_socket(fd2);
+ fd1 = fd2 = TOR_INVALID_SOCKET;
+ tt_int_op(get_n_open_sockets(), ==, n + 2);
+ tor_close_socket(fd3);
+ tor_close_socket(fd4);
+ fd3 = fd4 = TOR_INVALID_SOCKET;
+ tt_int_op(get_n_open_sockets(), ==, n);
+
+ done:
+ if (SOCKET_OK(fd1))
+ tor_close_socket(fd1);
+ if (SOCKET_OK(fd2))
+ tor_close_socket(fd2);
+ if (SOCKET_OK(fd3))
+ tor_close_socket(fd3);
+ if (SOCKET_OK(fd4))
+ tor_close_socket(fd4);
+}
+
+static void *
+socketpair_test_setup(const struct testcase_t *testcase)
+{
+ return testcase->setup_data;
+}
+static int
+socketpair_test_cleanup(const struct testcase_t *testcase, void *ptr)
+{
+ (void)testcase;
+ (void)ptr;
+ return 1;
+}
+
+static const struct testcase_setup_t socketpair_setup = {
+ socketpair_test_setup, socketpair_test_cleanup
+};
+
+/* Test for socketpair and ersatz_socketpair(). We test them both, since
+ * the latter is a tolerably good way to exersize tor_accept_socket(). */
+static void
+test_util_socketpair(void *arg)
+{
+ const int ersatz = !strcmp(arg, "1");
+ int (*const tor_socketpair_fn)(int, int, int, tor_socket_t[2]) =
+ ersatz ? tor_ersatz_socketpair : tor_socketpair;
+ int n = get_n_open_sockets();
+ tor_socket_t fds[2] = {TOR_INVALID_SOCKET, TOR_INVALID_SOCKET};
+ const int family = AF_UNIX;
+
+ tt_int_op(0, ==, tor_socketpair_fn(family, SOCK_STREAM, 0, fds));
+ tt_assert(SOCKET_OK(fds[0]));
+ tt_assert(SOCKET_OK(fds[1]));
+ tt_int_op(get_n_open_sockets(), ==, n + 2);
+#ifdef CAN_CHECK_CLOEXEC
+ tt_int_op(fd_is_cloexec(fds[0]), ==, 1);
+ tt_int_op(fd_is_cloexec(fds[1]), ==, 1);
+#endif
+#ifdef CAN_CHECK_NONBLOCK
+ tt_int_op(fd_is_nonblocking(fds[0]), ==, 0);
+ tt_int_op(fd_is_nonblocking(fds[1]), ==, 0);
+#endif
+
+ done:
+ if (SOCKET_OK(fds[0]))
+ tor_close_socket(fds[0]);
+ if (SOCKET_OK(fds[1]))
+ tor_close_socket(fds[1]);
+}
+
struct testcase_t util_tests[] = {
UTIL_LEGACY(time),
UTIL_TEST(parse_http_time, 0),
@@ -3346,8 +3483,8 @@ struct testcase_t util_tests[] = {
#ifdef _WIN32
UTIL_TEST(load_win_lib, 0),
#endif
- UTIL_TEST(exit_status, 0),
#ifndef _WIN32
+ UTIL_TEST(exit_status, 0),
UTIL_TEST(fgets_eagain, TT_SKIP),
#endif
UTIL_TEST(spawn_background_ok, 0),
@@ -3367,6 +3504,11 @@ struct testcase_t util_tests[] = {
UTIL_TEST(read_file_eof_zero_bytes, 0),
UTIL_TEST(mathlog, 0),
UTIL_TEST(weak_random, 0),
+ UTIL_TEST(socket, TT_FORK),
+ { "socketpair", test_util_socketpair, TT_FORK, &socketpair_setup,
+ (void*)"0" },
+ { "socketpair_ersatz", test_util_socketpair, TT_FORK,
+ &socketpair_setup, (void*)"1" },
END_OF_TESTCASES
};
diff --git a/src/tools/tor-checkkey.c b/src/tools/tor-checkkey.c
index a3860ca4b..d50f12ed2 100644
--- a/src/tools/tor-checkkey.c
+++ b/src/tools/tor-checkkey.c
@@ -1,8 +1,6 @@
/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#define CRYPTO_PRIVATE
-
#include "orconfig.h"
#include <stdio.h>
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index 3809b22d4..25beb2aae 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -27,8 +27,6 @@
#include <assert.h>
#endif
-#define CRYPTO_PRIVATE
-
#include "compat.h"
#include "../common/util.h"
#include "../common/torlog.h"